[ros-diffs] [fireball] 27385: - 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.

fireball at svn.reactos.org fireball at svn.reactos.org
Wed Jul 4 15:58:30 CEST 2007


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?rev=27385&r1=27384&r2=27385&view=diff
==============================================================================
--- 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.c?rev=27385&r1=27384&r2=27385&view=diff
==============================================================================
--- 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 */




More information about the Ros-diffs mailing list