Filip Navara <xnavara@volny.cz>: Use correct service name in IopInitializeDriverModule
Modified: trunk/reactos/ntoskrnl/include/internal/io.h
Modified: trunk/reactos/ntoskrnl/io/driver.c
Modified: trunk/reactos/ntoskrnl/io/iomgr.c
Modified: trunk/reactos/ntoskrnl/io/pnpmgr.c

Modified: trunk/reactos/ntoskrnl/include/internal/io.h
--- trunk/reactos/ntoskrnl/include/internal/io.h	2005-04-11 15:43:04 UTC (rev 14588)
+++ trunk/reactos/ntoskrnl/include/internal/io.h	2005-04-11 17:28:14 UTC (rev 14589)
@@ -491,6 +491,7 @@
 IopInitializeDriverModule(
    IN PDEVICE_NODE DeviceNode,
    IN PMODULE_OBJECT ModuleObject,
+   IN PUNICODE_STRING ServiceName,
    IN BOOLEAN FileSystemDriver,
    OUT PDRIVER_OBJECT *DriverObject);
 

Modified: trunk/reactos/ntoskrnl/io/driver.c
--- trunk/reactos/ntoskrnl/io/driver.c	2005-04-11 15:43:04 UTC (rev 14588)
+++ trunk/reactos/ntoskrnl/io/driver.c	2005-04-11 17:28:14 UTC (rev 14589)
@@ -511,6 +511,9 @@
  *       Module object representing the driver. It can be retrieve by
  *       IopLoadServiceModule.
  *
+ *    ServiceName
+ *       Name of the service (as in registry).
+ *
  *    FileSystemDriver
  *       Set to TRUE for file system drivers.
  *
@@ -523,6 +526,7 @@
 IopInitializeDriverModule(
    IN PDEVICE_NODE DeviceNode,
    IN PMODULE_OBJECT ModuleObject,
+   IN PUNICODE_STRING ServiceName,
    IN BOOLEAN FileSystemDriver,
    OUT PDRIVER_OBJECT *DriverObject)
 {
@@ -533,7 +537,7 @@
 
    Status = IopCreateDriverObject(
       DriverObject,
-      &DeviceNode->ServiceName,
+      ServiceName,
       FileSystemDriver,
       ModuleObject->Base,
       ModuleObject->Length);
@@ -544,14 +548,14 @@
       return Status;
    }
 
-   if (DeviceNode->ServiceName.Buffer)
+   if (ServiceName->Buffer)
    {
-      RegistryKey.Length = DeviceNode->ServiceName.Length +
+      RegistryKey.Length = ServiceName->Length +
          sizeof(ServicesKeyName) - sizeof(UNICODE_NULL);
       RegistryKey.MaximumLength = RegistryKey.Length + sizeof(UNICODE_NULL);
       RegistryKey.Buffer = ExAllocatePool(PagedPool, RegistryKey.MaximumLength);
       wcscpy(RegistryKey.Buffer, ServicesKeyName);
-      wcscat(RegistryKey.Buffer, DeviceNode->ServiceName.Buffer);
+      wcscat(RegistryKey.Buffer, ServiceName->Buffer);
    }
    else
    {
@@ -613,7 +617,8 @@
       if (!NT_SUCCESS(Status))
          continue;
 
-      Status = IopInitializeDriverModule(DeviceNode, ModuleObject, FALSE, &DriverObject);
+      Status = IopInitializeDriverModule(DeviceNode, ModuleObject, &ServiceName,
+                                         FALSE, &DriverObject);
       if (!NT_SUCCESS(Status))
          continue;
 
@@ -1165,8 +1170,8 @@
     * Initialize the driver
     */
 
-   Status = IopInitializeDriverModule(DeviceNode, ModuleObject, FALSE,
-      &DriverObject);
+   Status = IopInitializeDriverModule(DeviceNode, ModuleObject,
+      &DeviceNode->ServiceName, FALSE, &DriverObject);
    
    if (!NT_SUCCESS(Status))
    {
@@ -1873,6 +1878,7 @@
    Status = IopInitializeDriverModule(
       DeviceNode,
       ModuleObject,
+      &DeviceNode->ServiceName,
       (Type == 2 /* SERVICE_FILE_SYSTEM_DRIVER */ ||
        Type == 8 /* SERVICE_RECOGNIZER_DRIVER */),
       &DriverObject);

Modified: trunk/reactos/ntoskrnl/io/iomgr.c
--- trunk/reactos/ntoskrnl/io/iomgr.c	2005-04-11 15:43:04 UTC (rev 14588)
+++ trunk/reactos/ntoskrnl/io/iomgr.c	2005-04-11 17:28:14 UTC (rev 14589)
@@ -595,6 +595,7 @@
   Status = IopInitializeDriverModule(
     DeviceNode,
     &ModuleObject,
+    &DeviceNode->ServiceName,
     TRUE,
     &DriverObject);
   if (!NT_SUCCESS(Status))

Modified: trunk/reactos/ntoskrnl/io/pnpmgr.c
--- trunk/reactos/ntoskrnl/io/pnpmgr.c	2005-04-11 15:43:04 UTC (rev 14588)
+++ trunk/reactos/ntoskrnl/io/pnpmgr.c	2005-04-11 17:28:14 UTC (rev 14589)
@@ -1501,7 +1501,8 @@
       Status = IopLoadServiceModule(&DeviceNode->ServiceName, &ModuleObject);
       if (NT_SUCCESS(Status))
       {
-         Status = IopInitializeDriverModule(DeviceNode, ModuleObject, FALSE, &DriverObject);
+         Status = IopInitializeDriverModule(DeviceNode, ModuleObject,
+            &DeviceNode->ServiceName, FALSE, &DriverObject);
          if (NT_SUCCESS(Status))
          {
             /* Attach lower level filter drivers. */