Author: mjmartin
Date: Fri Aug  7 20:27:31 2009
New Revision: 42473

URL: http://svn.reactos.org/svn/reactos?rev=42473&view=rev
Log:
- Calling NtLoadDriver on an already loaded driver should fail with 
STATUS_IMAGE_ALREADY_LOADED. Fixes one test for kmtest driver tests and a 
bugcheck when loading the driver a second time.

Modified:
    trunk/reactos/ntoskrnl/io/iomgr/driver.c

Modified: trunk/reactos/ntoskrnl/io/iomgr/driver.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/io/iomgr/driver.c?rev=42473&r1=42472&r2=42473&view=diff
==============================================================================
--- trunk/reactos/ntoskrnl/io/iomgr/driver.c [iso-8859-1] (original)
+++ trunk/reactos/ntoskrnl/io/iomgr/driver.c [iso-8859-1] Fri Aug  7 20:27:31 
2009
@@ -1776,6 +1776,16 @@
        /* Store its DriverSection, so that it could be unloaded */
        DriverObject->DriverSection = ModuleObject;
    }
+   else
+   {
+      DPRINT("DriverObject already exist in ObjectManager\n");
+      /* IopGetDriverObject references the DriverObject, so dereference it. */
+      ObDereferenceObject(DriverObject);
+      IopFreeDeviceNode(DeviceNode);
+      LoadParams->Status = STATUS_IMAGE_ALREADY_LOADED;
+      (VOID)KeSetEvent(&LoadParams->Event, 0, FALSE);
+      return;
+   }
 
    IopInitializeDevice(DeviceNode, DriverObject);
    LoadParams->Status = IopStartDevice(DeviceNode);


Reply via email to