mirror of
https://github.com/reactos/reactos.git
synced 2024-07-21 19:58:08 +00:00
- Correctly set DN_DRIVER_LOADED flag.
- This fixes "i8042prt/kbdclass.sys get installed one more time at each boot". See issue #2330 for more details. svn path=/trunk/; revision=27385
This commit is contained in:
parent
4d91599bd6
commit
122331f605
|
@ -1645,6 +1645,9 @@ NtLoadDriver(IN PUNICODE_STRING DriverServiceName)
|
||||||
goto ReleaseCapturedString;
|
goto ReleaseCapturedString;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* We have a driver for this DeviceNode */
|
||||||
|
DeviceNode->Flags |= DN_DRIVER_LOADED;
|
||||||
}
|
}
|
||||||
|
|
||||||
IopInitializeDevice(DeviceNode, DriverObject);
|
IopInitializeDevice(DeviceNode, DriverObject);
|
||||||
|
|
|
@ -2380,29 +2380,30 @@ IopActionInitChildServices(PDEVICE_NODE DeviceNode,
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
/* Driver is not initialized, try to load it */
|
/* Driver is not initialized, try to load it */
|
||||||
Status = IopLoadServiceModule(&DeviceNode->ServiceName, &ModuleObject);
|
Status = IopLoadServiceModule(&DeviceNode->ServiceName, &ModuleObject);
|
||||||
|
|
||||||
if (NT_SUCCESS(Status) || Status == STATUS_IMAGE_ALREADY_LOADED)
|
if (NT_SUCCESS(Status) || Status == STATUS_IMAGE_ALREADY_LOADED)
|
||||||
{
|
{
|
||||||
/* STATUS_IMAGE_ALREADY_LOADED means this driver
|
/* STATUS_IMAGE_ALREADY_LOADED means this driver
|
||||||
was loaded by the bootloader */
|
was loaded by the bootloader */
|
||||||
if (Status != STATUS_IMAGE_ALREADY_LOADED)
|
if (Status != STATUS_IMAGE_ALREADY_LOADED)
|
||||||
{
|
{
|
||||||
/* Initialize the driver */
|
/* Initialize the driver */
|
||||||
DeviceNode->Flags |= DN_DRIVER_LOADED;
|
Status = IopInitializeDriverModule(DeviceNode, ModuleObject,
|
||||||
Status = IopInitializeDriverModule(DeviceNode, ModuleObject,
|
&DeviceNode->ServiceName, FALSE, &DriverObject);
|
||||||
&DeviceNode->ServiceName, FALSE, &DriverObject);
|
}
|
||||||
}
|
else
|
||||||
else
|
{
|
||||||
{
|
|
||||||
Status = STATUS_SUCCESS;
|
Status = STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Driver is loaded and initialized at this point */
|
/* Driver is loaded and initialized at this point */
|
||||||
if (NT_SUCCESS(Status))
|
if (NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
|
/* We have a driver for this DeviceNode */
|
||||||
|
DeviceNode->Flags |= DN_DRIVER_LOADED;
|
||||||
/* Attach lower level filter drivers. */
|
/* Attach lower level filter drivers. */
|
||||||
IopAttachFilterDrivers(DeviceNode, TRUE);
|
IopAttachFilterDrivers(DeviceNode, TRUE);
|
||||||
/* Initialize the function driver for the device node */
|
/* Initialize the function driver for the device node */
|
||||||
|
|
Loading…
Reference in a new issue