Sebastian Lackner : winedevice: Use LdrFindEntryForAddress to find LDR_MODULE address.
Alexandre Julliard
julliard at wine.codeweavers.com
Fri Feb 26 10:26:45 CST 2016
Module: wine
Branch: master
Commit: 4bed3d231e96687efbdba3ff4c96fbbdfe450ba8
URL: http://source.winehq.org/git/wine.git/?a=commit;h=4bed3d231e96687efbdba3ff4c96fbbdfe450ba8
Author: Sebastian Lackner <sebastian at fds-team.de>
Date: Fri Feb 26 06:11:26 2016 +0100
winedevice: Use LdrFindEntryForAddress to find LDR_MODULE address.
Signed-off-by: Sebastian Lackner <sebastian at fds-team.de>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
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 */
More information about the wine-cvs
mailing list