From 6ea50da3a222662dd214231352b6e2f42a880729 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Fri, 17 Jan 2014 21:49:43 +0000 Subject: [PATCH] [NTOSKRNL] 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 | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/reactos/ntoskrnl/io/iomgr/driver.c b/reactos/ntoskrnl/io/iomgr/driver.c index d3e749bc3e8..da913b1dd4b 100644 --- a/reactos/ntoskrnl/io/iomgr/driver.c +++ b/reactos/ntoskrnl/io/iomgr/driver.c @@ -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 */ -- 2.17.1