Author: fireball
Date: Wed Jul 4 17:58:30 2007
New Revision: 27385
URL:
http://svn.reactos.org/svn/reactos?rev=27385&view=rev
Log:
- 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.
Modified:
trunk/reactos/ntoskrnl/io/iomgr/driver.c
trunk/reactos/ntoskrnl/io/pnpmgr/pnpmgr.c
Modified: trunk/reactos/ntoskrnl/io/iomgr/driver.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/io/iomgr/driver.c…
==============================================================================
--- trunk/reactos/ntoskrnl/io/iomgr/driver.c (original)
+++ trunk/reactos/ntoskrnl/io/iomgr/driver.c Wed Jul 4 17:58:30 2007
@@ -1645,6 +1645,9 @@
goto ReleaseCapturedString;
}
}
+
+ /* We have a driver for this DeviceNode */
+ DeviceNode->Flags |= DN_DRIVER_LOADED;
}
IopInitializeDevice(DeviceNode, DriverObject);
Modified: trunk/reactos/ntoskrnl/io/pnpmgr/pnpmgr.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/io/pnpmgr/pnpmgr.…
==============================================================================
--- trunk/reactos/ntoskrnl/io/pnpmgr/pnpmgr.c (original)
+++ trunk/reactos/ntoskrnl/io/pnpmgr/pnpmgr.c Wed Jul 4 17:58:30 2007
@@ -2380,29 +2380,30 @@
if (!NT_SUCCESS(Status))
{
/* Driver is not initialized, try to load it */
- Status = IopLoadServiceModule(&DeviceNode->ServiceName, &ModuleObject);
-
- if (NT_SUCCESS(Status) || Status == STATUS_IMAGE_ALREADY_LOADED)
- {
+ Status = IopLoadServiceModule(&DeviceNode->ServiceName,
&ModuleObject);
+
+ if (NT_SUCCESS(Status) || Status == STATUS_IMAGE_ALREADY_LOADED)
+ {
/* STATUS_IMAGE_ALREADY_LOADED means this driver
was loaded by the bootloader */
- if (Status != STATUS_IMAGE_ALREADY_LOADED)
- {
+ if (Status != STATUS_IMAGE_ALREADY_LOADED)
+ {
/* Initialize the driver */
- DeviceNode->Flags |= DN_DRIVER_LOADED;
- Status = IopInitializeDriverModule(DeviceNode, ModuleObject,
- &DeviceNode->ServiceName, FALSE, &DriverObject);
- }
- else
- {
+ Status = IopInitializeDriverModule(DeviceNode, ModuleObject,
+ &DeviceNode->ServiceName, FALSE, &DriverObject);
+ }
+ else
+ {
Status = STATUS_SUCCESS;
- }
+ }
}
}
/* Driver is loaded and initialized at this point */
if (NT_SUCCESS(Status))
{
+ /* We have a driver for this DeviceNode */
+ DeviceNode->Flags |= DN_DRIVER_LOADED;
/* Attach lower level filter drivers. */
IopAttachFilterDrivers(DeviceNode, TRUE);
/* Initialize the function driver for the device node */