[NTOSKRNL]
authorTimo Kreuzer <timo.kreuzer@reactos.org>
Fri, 17 Jan 2014 21:49:43 +0000 (21:49 +0000)
committerTimo Kreuzer <timo.kreuzer@reactos.org>
Fri, 17 Jan 2014 21:49:43 +0000 (21:49 +0000)
Lookup new Ldr entries in IopInitializeBuiltinDriver (we used the old ones from the loader block, that are not valid anymore after the drivers have been relocated!)

svn path=/trunk/; revision=61659

reactos/ntoskrnl/io/iomgr/driver.c

index d3e749b..da913b1 100644 (file)
@@ -818,14 +818,16 @@ LdrProcessDriverModule(PLDR_DATA_TABLE_ENTRY LdrEntry,
 NTSTATUS
 NTAPI
 INIT_FUNCTION
-IopInitializeBuiltinDriver(IN PLDR_DATA_TABLE_ENTRY LdrEntry)
+IopInitializeBuiltinDriver(IN PLDR_DATA_TABLE_ENTRY BootLdrEntry)
 {
     PDEVICE_NODE DeviceNode;
     PDRIVER_OBJECT DriverObject;
     NTSTATUS Status;
     PWCHAR FileNameWithoutPath;
     LPWSTR FileExtension;
-    PUNICODE_STRING ModuleName = &LdrEntry->BaseDllName;
+    PUNICODE_STRING ModuleName = &BootLdrEntry->BaseDllName;
+    PLDR_DATA_TABLE_ENTRY LdrEntry;
+    PLIST_ENTRY NextEntry;
     UNICODE_STRING ServiceName;
 
    /*
@@ -869,6 +871,22 @@ IopInitializeBuiltinDriver(IN PLDR_DATA_TABLE_ENTRY LdrEntry)
       return(Status);
    }
 
+   /* Lookup the new Ldr entry in PsLoadedModuleList */
+   NextEntry = PsLoadedModuleList.Flink;
+   while (NextEntry != &PsLoadedModuleList)
+   {
+      LdrEntry = CONTAINING_RECORD(NextEntry,
+                                   LDR_DATA_TABLE_ENTRY,
+                                   InLoadOrderLinks);
+      if (RtlEqualUnicodeString(ModuleName, &LdrEntry->BaseDllName, TRUE))
+      {
+            break;
+      }
+
+      NextEntry = NextEntry->Flink;
+   }
+   NT_ASSERT(NextEntry != &PsLoadedModuleList);
+
    /*
     * Initialize the driver
     */