[1/2] winedevice: Use LdrFindEntryForAddress to find LDR_MODULE address.

Sebastian Lackner sebastian at fds-team.de
Thu Feb 25 23:11:26 CST 2016


Signed-off-by: Sebastian Lackner <sebastian at fds-team.de>
---
 programs/winedevice/device.c |   15 +++++++++------
 1 file changed, 9 insertions(+), 6 deletions(-)

diff --git a/programs/winedevice/device.c b/programs/winedevice/device.c
index ef1e1ef..43963b6 100644
--- a/programs/winedevice/device.c
+++ b/programs/winedevice/device.c
@@ -50,15 +50,18 @@ static DRIVER_EXTENSION driver_extension;
 /* find the LDR_MODULE corresponding to the driver module */
 static LDR_MODULE *find_ldr_module( HMODULE module )
 {
-    LIST_ENTRY *entry, *list = &NtCurrentTeb()->Peb->LdrData->InMemoryOrderModuleList;
+    LDR_MODULE *ldr;
+    ULONG_PTR magic;
 
-    for (entry = list->Flink; entry != list; entry = entry->Flink)
+    LdrLockLoaderLock( 0, NULL, &magic );
+    if (LdrFindEntryForAddress( module, &ldr ))
     {
-        LDR_MODULE *ldr = CONTAINING_RECORD(entry, LDR_MODULE, InMemoryOrderModuleList);
-        if (ldr->BaseAddress == module) return ldr;
-        if (ldr->BaseAddress > (void *)module) break;
+        WARN( "module not found for %p\n", module );
+        ldr = NULL;
     }
-    return NULL;
+    LdrUnlockLoaderLock( 0, magic );
+
+    return ldr;
 }
 
 /* load the driver module file */
-- 
2.7.1



More information about the wine-patches mailing list