Use LDR_DATA_TABLE_ENTRY instead of LDR_MODULE. the former is the actual structure. would be wise to fix the defs too.

svn path=/trunk/; revision=16203
This commit is contained in:
Alex Ionescu 2005-06-21 04:10:45 +00:00
parent 1595459dbc
commit 77f673dd82
18 changed files with 196 additions and 192 deletions

View file

@ -167,7 +167,7 @@ BOOLEAN ListUserModules( PPEB peb )
{ {
PLIST_ENTRY UserModuleListHead; PLIST_ENTRY UserModuleListHead;
PLIST_ENTRY Entry; PLIST_ENTRY Entry;
PLDR_MODULE Module; PLDR_DATA_TABLE_ENTRY Module;
PPEB_LDR_DATA Ldr; PPEB_LDR_DATA Ldr;
ENTER_FUNC(); ENTER_FUNC();
@ -179,7 +179,7 @@ BOOLEAN ListUserModules( PPEB peb )
Entry = UserModuleListHead->Flink; Entry = UserModuleListHead->Flink;
while (Entry != UserModuleListHead) while (Entry != UserModuleListHead)
{ {
Module = CONTAINING_RECORD(Entry, LDR_MODULE, InLoadOrderModuleList); Module = CONTAINING_RECORD(Entry, LDR_DATA_TABLE_ENTRY, InLoadOrderModuleList);
//DbgPrint("Module: %x, BaseAddress: %x\n", Module, Module->BaseAddress); //DbgPrint("Module: %x, BaseAddress: %x\n", Module, Module->BaseAddress);
DPRINT((0,"FullName: %S, BaseName: %S, Length: %ld, EntryPoint: %x, BaseAddress: %x\n", Module->FullDllName.Buffer, DPRINT((0,"FullName: %S, BaseName: %S, Length: %ld, EntryPoint: %x, BaseAddress: %x\n", Module->FullDllName.Buffer,

View file

@ -89,7 +89,7 @@ typedef NTSTATUS NTAPI (*PSYSMOD_ENUM_ROUTINE)
typedef NTSTATUS NTAPI (*PPROCMOD_ENUM_ROUTINE) typedef NTSTATUS NTAPI (*PPROCMOD_ENUM_ROUTINE)
( (
IN HANDLE ProcessHandle, IN HANDLE ProcessHandle,
IN PLDR_MODULE CurrentModule, IN PLDR_DATA_TABLE_ENTRY CurrentModule,
IN OUT PVOID CallbackContext IN OUT PVOID CallbackContext
); );

View file

@ -25,10 +25,8 @@
#ifndef __EPSAPI_H_INCLUDED__ #ifndef __EPSAPI_H_INCLUDED__
#define __EPSAPI_H_INCLUDED__ #define __EPSAPI_H_INCLUDED__
/* INCLUDES */ /* Remove soon */
#include <ntdll/ldr.h> /* FIXME: USE LDR_DATA_TABLE_ENTRY */ #include <ntdll/ldr.h>
/* OBJECTS */
/* TYPES */ /* TYPES */
typedef NTSTATUS (NTAPI *PPROC_ENUM_ROUTINE)(IN PSYSTEM_PROCESS_INFORMATION CurrentProcess, typedef NTSTATUS (NTAPI *PPROC_ENUM_ROUTINE)(IN PSYSTEM_PROCESS_INFORMATION CurrentProcess,
@ -41,7 +39,7 @@ typedef NTSTATUS (NTAPI *PSYSMOD_ENUM_ROUTINE)(IN PSYSTEM_MODULE_INFORMATION_ENT
IN OUT PVOID CallbackContext); IN OUT PVOID CallbackContext);
typedef NTSTATUS (NTAPI *PPROCMOD_ENUM_ROUTINE)(IN HANDLE ProcessHandle, typedef NTSTATUS (NTAPI *PPROCMOD_ENUM_ROUTINE)(IN HANDLE ProcessHandle,
IN PLDR_MODULE CurrentModule, IN PLDR_DATA_TABLE_ENTRY CurrentModule,
IN OUT PVOID CallbackContext); IN OUT PVOID CallbackContext);
/* CONSTANTS */ /* CONSTANTS */

View file

@ -6,7 +6,7 @@
/* /*
* General type for status information * General type for status information
*/ */
#ifndef __USE_W32API
typedef enum _NT_PRODUCT_TYPE typedef enum _NT_PRODUCT_TYPE
{ {
NtProductWinNt = 1, NtProductWinNt = 1,

View file

@ -43,6 +43,7 @@ typedef struct _PEB_LDR_DATA
PVOID EntryInProgress; PVOID EntryInProgress;
} PEB_LDR_DATA, *PPEB_LDR_DATA; } PEB_LDR_DATA, *PPEB_LDR_DATA;
#if 0
typedef struct _LDR_DATA_TABLE_ENTRY typedef struct _LDR_DATA_TABLE_ENTRY
{ {
LIST_ENTRY InLoadOrderModuleList; LIST_ENTRY InLoadOrderModuleList;
@ -63,6 +64,7 @@ typedef struct _LDR_DATA_TABLE_ENTRY
PVOID LoadedImports; PVOID LoadedImports;
PVOID EntryPointActivationContext; PVOID EntryPointActivationContext;
} LDR_DATA_TABLE_ENTRY, *PLDR_DATA_TABLE_ENTRY; } LDR_DATA_TABLE_ENTRY, *PLDR_DATA_TABLE_ENTRY;
#endif
typedef struct _LDR_RESOURCE_INFO typedef struct _LDR_RESOURCE_INFO
{ {

View file

@ -54,29 +54,32 @@ LdrQueryProcessModuleInformation(IN PMODULE_INFORMATION ModuleInformation OPTION
#define PROCESS_ATTACH_CALLED 0x00080000 #define PROCESS_ATTACH_CALLED 0x00080000
#define IMAGE_NOT_AT_BASE 0x00200000 #define IMAGE_NOT_AT_BASE 0x00200000
typedef struct _LDR_MODULE typedef struct _LDR_DATA_TABLE_ENTRY
{ {
LIST_ENTRY InLoadOrderModuleList; LIST_ENTRY InLoadOrderModuleList;
LIST_ENTRY InMemoryOrderModuleList; /* not used */ LIST_ENTRY InMemoryOrderModuleList;
LIST_ENTRY InInitializationOrderModuleList; /* not used */ LIST_ENTRY InInitializationOrderModuleList;
PVOID BaseAddress; PVOID DllBase;
ULONG EntryPoint; PVOID EntryPoint;
ULONG ResidentSize; ULONG SizeOfImage;
UNICODE_STRING FullDllName; UNICODE_STRING FullDllName;
UNICODE_STRING BaseDllName; UNICODE_STRING BaseDllName;
ULONG Flags; ULONG Flags;
SHORT LoadCount; SHORT LoadCount; /* FIXME: HACK!!! FIX ASAP */
SHORT TlsIndex; SHORT TlsIndex; /* FIXME: HACK!!! FIX ASAP */
HANDLE SectionHandle; LIST_ENTRY HashLinks;
PVOID SectionPointer;
ULONG CheckSum; ULONG CheckSum;
ULONG TimeDateStamp; ULONG TimeDateStamp;
PVOID LoadedImports;
PVOID EntryPointActivationContext;
#if defined(DBG) || defined(KDBG) #if defined(DBG) || defined(KDBG)
PROSSYM_INFO RosSymInfo; PROSSYM_INFO RosSymInfo; /* FIXME: THIS _REALLY_ NEEDS TO GO (TLS?)!!! */
#endif /* KDBG */ #endif /* KDBG */
} LDR_MODULE, *PLDR_MODULE; } LDR_DATA_TABLE_ENTRY, *PLDR_DATA_TABLE_ENTRY;
typedef struct _LDR_SYMBOL_INFO { typedef struct _LDR_SYMBOL_INFO {
PLDR_MODULE ModuleObject; PLDR_DATA_TABLE_ENTRY ModuleObject;
ULONG_PTR ImageBase; ULONG_PTR ImageBase;
PVOID SymbolsBuffer; PVOID SymbolsBuffer;
ULONG SymbolsBufferLength; ULONG SymbolsBufferLength;
@ -90,7 +93,7 @@ typedef struct _LDR_SYMBOL_INFO {
#if defined(KDBG) || defined(DBG) #if defined(KDBG) || defined(DBG)
VOID VOID
LdrpLoadUserModuleSymbols(PLDR_MODULE LdrModule); LdrpLoadUserModuleSymbols(PLDR_DATA_TABLE_ENTRY LdrModule);
#endif #endif
@ -99,7 +102,7 @@ LdrpGetResidentSize(PIMAGE_NT_HEADERS NTHeaders);
PEPFUNC LdrPEStartup (PVOID ImageBase, PEPFUNC LdrPEStartup (PVOID ImageBase,
HANDLE SectionHandle, HANDLE SectionHandle,
PLDR_MODULE* Module, PLDR_DATA_TABLE_ENTRY* Module,
PWSTR FullDosName); PWSTR FullDosName);
NTSTATUS LdrMapSections(HANDLE ProcessHandle, NTSTATUS LdrMapSections(HANDLE ProcessHandle,
PVOID ImageBase, PVOID ImageBase,
@ -120,7 +123,7 @@ LdrGetDllHandle(IN PWCHAR Path OPTIONAL,
NTSTATUS STDCALL NTSTATUS STDCALL
LdrFindEntryForAddress(IN PVOID Address, LdrFindEntryForAddress(IN PVOID Address,
OUT PLDR_MODULE *Module); OUT PLDR_DATA_TABLE_ENTRY *Module);
NTSTATUS STDCALL NTSTATUS STDCALL
LdrGetProcedureAddress(IN PVOID BaseAddress, LdrGetProcedureAddress(IN PVOID BaseAddress,

View file

@ -49,7 +49,7 @@ PsaEnumerateProcessModules(IN HANDLE ProcessHandle,
while(Current != ListHead) while(Current != ListHead)
{ {
PLDR_MODULE LoaderModule = CONTAINING_RECORD(Current, LDR_MODULE, InLoadOrderModuleList); PLDR_DATA_TABLE_ENTRY LoaderModule = CONTAINING_RECORD(Current, LDR_DATA_TABLE_ENTRY, InLoadOrderModuleList);
/* return the current module to the callback */ /* return the current module to the callback */
Status = Callback(ProcessHandle, LoaderModule, CallbackContext); Status = Callback(ProcessHandle, LoaderModule, CallbackContext);
@ -73,7 +73,7 @@ PsaEnumerateProcessModules(IN HANDLE ProcessHandle,
{ {
PROCESS_BASIC_INFORMATION BasicInformation; PROCESS_BASIC_INFORMATION BasicInformation;
PPEB_LDR_DATA LoaderData; PPEB_LDR_DATA LoaderData;
LDR_MODULE LoaderModule; LDR_DATA_TABLE_ENTRY LoaderModule;
PLIST_ENTRY ListHead, Current; PLIST_ENTRY ListHead, Current;
/* query the process basic information (includes the PEB address) */ /* query the process basic information (includes the PEB address) */
@ -116,7 +116,7 @@ PsaEnumerateProcessModules(IN HANDLE ProcessHandle,
{ {
/* read the current module */ /* read the current module */
Status = NtReadVirtualMemory(ProcessHandle, Status = NtReadVirtualMemory(ProcessHandle,
CONTAINING_RECORD(Current, LDR_MODULE, InLoadOrderModuleList), CONTAINING_RECORD(Current, LDR_DATA_TABLE_ENTRY, InLoadOrderModuleList),
&LoaderModule, &LoaderModule,
sizeof(LoaderModule), sizeof(LoaderModule),
NULL); NULL);

View file

@ -268,7 +268,7 @@ GetModuleFileNameA (
ANSI_STRING FileName; ANSI_STRING FileName;
PLIST_ENTRY ModuleListHead; PLIST_ENTRY ModuleListHead;
PLIST_ENTRY Entry; PLIST_ENTRY Entry;
PLDR_MODULE Module; PLDR_DATA_TABLE_ENTRY Module;
PPEB Peb; PPEB Peb;
ULONG Length = 0; ULONG Length = 0;
@ -283,8 +283,8 @@ GetModuleFileNameA (
while (Entry != ModuleListHead) while (Entry != ModuleListHead)
{ {
Module = CONTAINING_RECORD(Entry, LDR_MODULE, InLoadOrderModuleList); Module = CONTAINING_RECORD(Entry, LDR_DATA_TABLE_ENTRY, InLoadOrderModuleList);
if (Module->BaseAddress == (PVOID)hModule) if (Module->DllBase == (PVOID)hModule)
{ {
if (nSize * sizeof(WCHAR) < Module->FullDllName.Length) if (nSize * sizeof(WCHAR) < Module->FullDllName.Length)
{ {
@ -336,7 +336,7 @@ GetModuleFileNameW (
UNICODE_STRING FileName; UNICODE_STRING FileName;
PLIST_ENTRY ModuleListHead; PLIST_ENTRY ModuleListHead;
PLIST_ENTRY Entry; PLIST_ENTRY Entry;
PLDR_MODULE Module; PLDR_DATA_TABLE_ENTRY Module;
PPEB Peb; PPEB Peb;
ULONG Length = 0; ULONG Length = 0;
@ -350,9 +350,9 @@ GetModuleFileNameW (
Entry = ModuleListHead->Flink; Entry = ModuleListHead->Flink;
while (Entry != ModuleListHead) while (Entry != ModuleListHead)
{ {
Module = CONTAINING_RECORD(Entry, LDR_MODULE, InLoadOrderModuleList); Module = CONTAINING_RECORD(Entry, LDR_DATA_TABLE_ENTRY, InLoadOrderModuleList);
if (Module->BaseAddress == (PVOID)hModule) if (Module->DllBase == (PVOID)hModule)
{ {
if (nSize * sizeof(WCHAR) < Module->FullDllName.Length) if (nSize * sizeof(WCHAR) < Module->FullDllName.Length)
{ {

View file

@ -21,7 +21,7 @@ ULONG
LdrpGetResidentSize(PIMAGE_NT_HEADERS NTHeaders); LdrpGetResidentSize(PIMAGE_NT_HEADERS NTHeaders);
PEPFUNC LdrPEStartup (PVOID ImageBase, PEPFUNC LdrPEStartup (PVOID ImageBase,
HANDLE SectionHandle, HANDLE SectionHandle,
PLDR_MODULE* Module, PLDR_DATA_TABLE_ENTRY* Module,
PWSTR FullDosName); PWSTR FullDosName);
#if 0 #if 0
typedef BOOL typedef BOOL
@ -36,7 +36,7 @@ RtlpInitDeferedCriticalSection(
); );
#if defined(KDBG) || defined(DBG) #if defined(KDBG) || defined(DBG)
VOID VOID
LdrpLoadUserModuleSymbols(PLDR_MODULE LdrModule); LdrpLoadUserModuleSymbols(PLDR_DATA_TABLE_ENTRY LdrModule);
#endif #endif
extern HANDLE WindowsApiPort; extern HANDLE WindowsApiPort;

View file

@ -26,7 +26,7 @@ extern unsigned int _image_base__;
static RTL_CRITICAL_SECTION PebLock; static RTL_CRITICAL_SECTION PebLock;
static RTL_CRITICAL_SECTION LoaderLock; static RTL_CRITICAL_SECTION LoaderLock;
static RTL_BITMAP TlsBitMap; static RTL_BITMAP TlsBitMap;
PLDR_MODULE ExeModule; PLDR_DATA_TABLE_ENTRY ExeModule;
NTSTATUS LdrpAttachThread (VOID); NTSTATUS LdrpAttachThread (VOID);
@ -225,7 +225,7 @@ __true_LdrInitializeThunk (ULONG Unknown1,
PIMAGE_DOS_HEADER PEDosHeader; PIMAGE_DOS_HEADER PEDosHeader;
PVOID ImageBase; PVOID ImageBase;
PPEB Peb; PPEB Peb;
PLDR_MODULE NtModule; // ntdll PLDR_DATA_TABLE_ENTRY NtModule; // ntdll
NLSTABLEINFO NlsTable; NLSTABLEINFO NlsTable;
WCHAR FullNtDllPath[MAX_PATH]; WCHAR FullNtDllPath[MAX_PATH];
SYSTEM_BASIC_INFORMATION SystemInformation; SYSTEM_BASIC_INFORMATION SystemInformation;
@ -350,17 +350,17 @@ __true_LdrInitializeThunk (ULONG Unknown1,
wcscat (FullNtDllPath, L"\\system32\\ntdll.dll"); wcscat (FullNtDllPath, L"\\system32\\ntdll.dll");
/* add entry for ntdll */ /* add entry for ntdll */
NtModule = (PLDR_MODULE)RtlAllocateHeap (Peb->ProcessHeap, NtModule = (PLDR_DATA_TABLE_ENTRY)RtlAllocateHeap (Peb->ProcessHeap,
0, 0,
sizeof(LDR_MODULE)); sizeof(LDR_DATA_TABLE_ENTRY));
if (NtModule == NULL) if (NtModule == NULL)
{ {
DPRINT1("Failed to create loader module entry (NTDLL)\n"); DPRINT1("Failed to create loader module entry (NTDLL)\n");
ZwTerminateProcess(NtCurrentProcess(),STATUS_UNSUCCESSFUL); ZwTerminateProcess(NtCurrentProcess(),STATUS_UNSUCCESSFUL);
} }
memset(NtModule, 0, sizeof(LDR_MODULE)); memset(NtModule, 0, sizeof(LDR_DATA_TABLE_ENTRY));
NtModule->BaseAddress = (PVOID)&_image_base__; NtModule->DllBase = (PVOID)&_image_base__;
NtModule->EntryPoint = 0; /* no entry point */ NtModule->EntryPoint = 0; /* no entry point */
RtlCreateUnicodeString (&NtModule->FullDllName, RtlCreateUnicodeString (&NtModule->FullDllName,
FullNtDllPath); FullNtDllPath);
@ -370,11 +370,11 @@ __true_LdrInitializeThunk (ULONG Unknown1,
NtModule->LoadCount = -1; /* don't unload */ NtModule->LoadCount = -1; /* don't unload */
NtModule->TlsIndex = -1; NtModule->TlsIndex = -1;
NtModule->SectionHandle = NULL; NtModule->SectionPointer = NULL;
NtModule->CheckSum = 0; NtModule->CheckSum = 0;
NTHeaders = RtlImageNtHeader (NtModule->BaseAddress); NTHeaders = RtlImageNtHeader (NtModule->DllBase);
NtModule->ResidentSize = LdrpGetResidentSize(NTHeaders); NtModule->SizeOfImage = LdrpGetResidentSize(NTHeaders);
NtModule->TimeDateStamp = NTHeaders->FileHeader.TimeDateStamp; NtModule->TimeDateStamp = NTHeaders->FileHeader.TimeDateStamp;
InsertTailList(&Peb->Ldr->InLoadOrderModuleList, InsertTailList(&Peb->Ldr->InLoadOrderModuleList,
@ -389,15 +389,15 @@ __true_LdrInitializeThunk (ULONG Unknown1,
#endif /* DBG || KDBG */ #endif /* DBG || KDBG */
/* add entry for executable (becomes first list entry) */ /* add entry for executable (becomes first list entry) */
ExeModule = (PLDR_MODULE)RtlAllocateHeap (Peb->ProcessHeap, ExeModule = (PLDR_DATA_TABLE_ENTRY)RtlAllocateHeap (Peb->ProcessHeap,
0, 0,
sizeof(LDR_MODULE)); sizeof(LDR_DATA_TABLE_ENTRY));
if (ExeModule == NULL) if (ExeModule == NULL)
{ {
DPRINT1("Failed to create loader module infomation\n"); DPRINT1("Failed to create loader module infomation\n");
ZwTerminateProcess(NtCurrentProcess(),STATUS_UNSUCCESSFUL); ZwTerminateProcess(NtCurrentProcess(),STATUS_UNSUCCESSFUL);
} }
ExeModule->BaseAddress = Peb->ImageBaseAddress; ExeModule->DllBase = Peb->ImageBaseAddress;
if ((Peb->ProcessParameters == NULL) || if ((Peb->ProcessParameters == NULL) ||
(Peb->ProcessParameters->ImagePathName.Length == 0)) (Peb->ProcessParameters->ImagePathName.Length == 0))
@ -418,11 +418,11 @@ __true_LdrInitializeThunk (ULONG Unknown1,
ExeModule->Flags = ENTRY_PROCESSED; ExeModule->Flags = ENTRY_PROCESSED;
ExeModule->LoadCount = -1; /* don't unload */ ExeModule->LoadCount = -1; /* don't unload */
ExeModule->TlsIndex = -1; ExeModule->TlsIndex = -1;
ExeModule->SectionHandle = NULL; ExeModule->SectionPointer = NULL;
ExeModule->CheckSum = 0; ExeModule->CheckSum = 0;
NTHeaders = RtlImageNtHeader (ExeModule->BaseAddress); NTHeaders = RtlImageNtHeader (ExeModule->DllBase);
ExeModule->ResidentSize = LdrpGetResidentSize(NTHeaders); ExeModule->SizeOfImage = LdrpGetResidentSize(NTHeaders);
ExeModule->TimeDateStamp = NTHeaders->FileHeader.TimeDateStamp; ExeModule->TimeDateStamp = NTHeaders->FileHeader.TimeDateStamp;
InsertHeadList(&Peb->Ldr->InLoadOrderModuleList, InsertHeadList(&Peb->Ldr->InLoadOrderModuleList,
@ -437,7 +437,7 @@ __true_LdrInitializeThunk (ULONG Unknown1,
#endif /* DBG || KDBG */ #endif /* DBG || KDBG */
EntryPoint = LdrPEStartup((PVOID)ImageBase, NULL, NULL, NULL); EntryPoint = LdrPEStartup((PVOID)ImageBase, NULL, NULL, NULL);
ExeModule->EntryPoint = (ULONG)EntryPoint; ExeModule->EntryPoint = EntryPoint;
/* all required dlls are loaded now */ /* all required dlls are loaded now */
Peb->Ldr->Initialized = TRUE; Peb->Ldr->Initialized = TRUE;

View file

@ -42,7 +42,7 @@ typedef struct _TLS_DATA
DWORD TlsDataSize; DWORD TlsDataSize;
DWORD TlsZeroSize; DWORD TlsZeroSize;
PIMAGE_TLS_CALLBACK TlsAddressOfCallBacks; PIMAGE_TLS_CALLBACK TlsAddressOfCallBacks;
PLDR_MODULE Module; PLDR_DATA_TABLE_ENTRY Module;
} TLS_DATA, *PTLS_DATA; } TLS_DATA, *PTLS_DATA;
static PTLS_DATA LdrpTlsArray = NULL; static PTLS_DATA LdrpTlsArray = NULL;
@ -50,18 +50,18 @@ static ULONG LdrpTlsCount = 0;
static ULONG LdrpTlsSize = 0; static ULONG LdrpTlsSize = 0;
static HANDLE LdrpKnownDllsDirHandle = NULL; static HANDLE LdrpKnownDllsDirHandle = NULL;
static UNICODE_STRING LdrpKnownDllPath = {0, 0, NULL}; static UNICODE_STRING LdrpKnownDllPath = {0, 0, NULL};
static PLDR_MODULE LdrpLastModule = NULL; static PLDR_DATA_TABLE_ENTRY LdrpLastModule = NULL;
extern PLDR_MODULE ExeModule; extern PLDR_DATA_TABLE_ENTRY ExeModule;
/* PROTOTYPES ****************************************************************/ /* PROTOTYPES ****************************************************************/
static NTSTATUS LdrFindEntryForName(PUNICODE_STRING Name, PLDR_MODULE *Module, BOOLEAN Ref); static NTSTATUS LdrFindEntryForName(PUNICODE_STRING Name, PLDR_DATA_TABLE_ENTRY *Module, BOOLEAN Ref);
static PVOID LdrFixupForward(PCHAR ForwardName); static PVOID LdrFixupForward(PCHAR ForwardName);
static PVOID LdrGetExportByName(PVOID BaseAddress, PUCHAR SymbolName, USHORT Hint); static PVOID LdrGetExportByName(PVOID BaseAddress, PUCHAR SymbolName, USHORT Hint);
static NTSTATUS LdrpLoadModule(IN PWSTR SearchPath OPTIONAL, static NTSTATUS LdrpLoadModule(IN PWSTR SearchPath OPTIONAL,
IN ULONG LoadFlags, IN ULONG LoadFlags,
IN PUNICODE_STRING Name, IN PUNICODE_STRING Name,
OUT PLDR_MODULE *Module, OUT PLDR_DATA_TABLE_ENTRY *Module,
OUT PVOID *BaseAddress OPTIONAL); OUT PVOID *BaseAddress OPTIONAL);
static NTSTATUS LdrpAttachProcess(VOID); static NTSTATUS LdrpAttachProcess(VOID);
static VOID LdrpDetachProcess(BOOLEAN UnloadAll); static VOID LdrpDetachProcess(BOOLEAN UnloadAll);
@ -71,7 +71,7 @@ static VOID LdrpDetachProcess(BOOLEAN UnloadAll);
#if defined(DBG) || defined(KDBG) #if defined(DBG) || defined(KDBG)
VOID VOID
LdrpLoadUserModuleSymbols(PLDR_MODULE LdrModule) LdrpLoadUserModuleSymbols(PLDR_DATA_TABLE_ENTRY LdrModule)
{ {
NtSystemDebugControl( NtSystemDebugControl(
DebugDbgLoadSymbols, DebugDbgLoadSymbols,
@ -96,7 +96,7 @@ LdrMappedAsDataFile(PVOID *BaseAddress)
return FALSE; return FALSE;
} }
static inline LONG LdrpDecrementLoadCount(PLDR_MODULE Module, BOOLEAN Locked) static inline LONG LdrpDecrementLoadCount(PLDR_DATA_TABLE_ENTRY Module, BOOLEAN Locked)
{ {
LONG LoadCount; LONG LoadCount;
if (!Locked) if (!Locked)
@ -115,7 +115,7 @@ static inline LONG LdrpDecrementLoadCount(PLDR_MODULE Module, BOOLEAN Locked)
return LoadCount; return LoadCount;
} }
static inline LONG LdrpIncrementLoadCount(PLDR_MODULE Module, BOOLEAN Locked) static inline LONG LdrpIncrementLoadCount(PLDR_DATA_TABLE_ENTRY Module, BOOLEAN Locked)
{ {
LONG LoadCount; LONG LoadCount;
if (!Locked) if (!Locked)
@ -134,7 +134,7 @@ static inline LONG LdrpIncrementLoadCount(PLDR_MODULE Module, BOOLEAN Locked)
return LoadCount; return LoadCount;
} }
static inline VOID LdrpAcquireTlsSlot(PLDR_MODULE Module, ULONG Size, BOOLEAN Locked) static inline VOID LdrpAcquireTlsSlot(PLDR_DATA_TABLE_ENTRY Module, ULONG Size, BOOLEAN Locked)
{ {
if (!Locked) if (!Locked)
{ {
@ -149,7 +149,7 @@ static inline VOID LdrpAcquireTlsSlot(PLDR_MODULE Module, ULONG Size, BOOLEAN Lo
} }
} }
static inline VOID LdrpTlsCallback(PLDR_MODULE Module, ULONG dwReason) static inline VOID LdrpTlsCallback(PLDR_DATA_TABLE_ENTRY Module, ULONG dwReason)
{ {
PIMAGE_TLS_CALLBACK TlsCallback; PIMAGE_TLS_CALLBACK TlsCallback;
if (Module->TlsIndex >= 0 && Module->LoadCount == -1) if (Module->TlsIndex >= 0 && Module->LoadCount == -1)
@ -161,14 +161,14 @@ static inline VOID LdrpTlsCallback(PLDR_MODULE Module, ULONG dwReason)
{ {
TRACE_LDR("%wZ - Calling tls callback at %x\n", TRACE_LDR("%wZ - Calling tls callback at %x\n",
&Module->BaseDllName, TlsCallback); &Module->BaseDllName, TlsCallback);
TlsCallback(Module->BaseAddress, dwReason, NULL); TlsCallback(Module->DllBase, dwReason, NULL);
TlsCallback++; TlsCallback++;
} }
} }
} }
} }
static BOOLEAN LdrpCallDllEntry(PLDR_MODULE Module, DWORD dwReason, PVOID lpReserved) static BOOLEAN LdrpCallDllEntry(PLDR_DATA_TABLE_ENTRY Module, DWORD dwReason, PVOID lpReserved)
{ {
if (!(Module->Flags & IMAGE_DLL) || if (!(Module->Flags & IMAGE_DLL) ||
Module->EntryPoint == 0) Module->EntryPoint == 0)
@ -176,7 +176,7 @@ static BOOLEAN LdrpCallDllEntry(PLDR_MODULE Module, DWORD dwReason, PVOID lpRese
return TRUE; return TRUE;
} }
LdrpTlsCallback(Module, dwReason); LdrpTlsCallback(Module, dwReason);
return ((PDLLMAIN_FUNC)Module->EntryPoint)(Module->BaseAddress, dwReason, lpReserved); return ((PDLLMAIN_FUNC)Module->EntryPoint)(Module->DllBase, dwReason, lpReserved);
} }
static NTSTATUS static NTSTATUS
@ -234,7 +234,7 @@ LdrpInitializeTlsForProccess(VOID)
{ {
PLIST_ENTRY ModuleListHead; PLIST_ENTRY ModuleListHead;
PLIST_ENTRY Entry; PLIST_ENTRY Entry;
PLDR_MODULE Module; PLDR_DATA_TABLE_ENTRY Module;
PIMAGE_TLS_DIRECTORY TlsDirectory; PIMAGE_TLS_DIRECTORY TlsDirectory;
PTLS_DATA TlsData; PTLS_DATA TlsData;
@ -255,12 +255,12 @@ LdrpInitializeTlsForProccess(VOID)
Entry = ModuleListHead->Flink; Entry = ModuleListHead->Flink;
while (Entry != ModuleListHead) while (Entry != ModuleListHead)
{ {
Module = CONTAINING_RECORD(Entry, LDR_MODULE, InLoadOrderModuleList); Module = CONTAINING_RECORD(Entry, LDR_DATA_TABLE_ENTRY, InLoadOrderModuleList);
if (Module->LoadCount == -1 && if (Module->LoadCount == -1 &&
Module->TlsIndex >= 0) Module->TlsIndex >= 0)
{ {
TlsDirectory = (PIMAGE_TLS_DIRECTORY) TlsDirectory = (PIMAGE_TLS_DIRECTORY)
RtlImageDirectoryEntryToData(Module->BaseAddress, RtlImageDirectoryEntryToData(Module->DllBase,
TRUE, TRUE,
IMAGE_DIRECTORY_ENTRY_TLS, IMAGE_DIRECTORY_ENTRY_TLS,
NULL); NULL);
@ -458,21 +458,21 @@ LdrAdjustDllName (PUNICODE_STRING FullDllName,
RtlCreateUnicodeString(FullDllName, Buffer); RtlCreateUnicodeString(FullDllName, Buffer);
} }
PLDR_MODULE PLDR_DATA_TABLE_ENTRY
LdrAddModuleEntry(PVOID ImageBase, LdrAddModuleEntry(PVOID ImageBase,
PIMAGE_NT_HEADERS NTHeaders, PIMAGE_NT_HEADERS NTHeaders,
PWSTR FullDosName) PWSTR FullDosName)
{ {
PLDR_MODULE Module; PLDR_DATA_TABLE_ENTRY Module;
Module = RtlAllocateHeap(RtlGetProcessHeap(), 0, sizeof (LDR_MODULE)); Module = RtlAllocateHeap(RtlGetProcessHeap(), 0, sizeof (LDR_DATA_TABLE_ENTRY));
ASSERT(Module); ASSERT(Module);
memset(Module, 0, sizeof(LDR_MODULE)); memset(Module, 0, sizeof(LDR_DATA_TABLE_ENTRY));
Module->BaseAddress = (PVOID)ImageBase; Module->DllBase = (PVOID)ImageBase;
Module->EntryPoint = NTHeaders->OptionalHeader.AddressOfEntryPoint; Module->EntryPoint = (PVOID)NTHeaders->OptionalHeader.AddressOfEntryPoint;
if (Module->EntryPoint != 0) if (Module->EntryPoint != 0)
Module->EntryPoint += (ULONG)Module->BaseAddress; Module->EntryPoint += (ULONG)Module->DllBase;
Module->ResidentSize = LdrpGetResidentSize(NTHeaders); Module->SizeOfImage = LdrpGetResidentSize(NTHeaders);
if (NtCurrentPeb()->Ldr->Initialized == TRUE) if (NtCurrentPeb()->Ldr->Initialized == TRUE)
{ {
/* loading while app is running */ /* loading while app is running */
@ -728,7 +728,7 @@ LdrLoadDll (IN PWSTR SearchPath OPTIONAL,
OUT PVOID *BaseAddress OPTIONAL) OUT PVOID *BaseAddress OPTIONAL)
{ {
NTSTATUS Status; NTSTATUS Status;
PLDR_MODULE Module; PLDR_DATA_TABLE_ENTRY Module;
TRACE_LDR("LdrLoadDll, loading %wZ%s%S\n", TRACE_LDR("LdrLoadDll, loading %wZ%s%S\n",
Name, Name,
@ -751,7 +751,7 @@ LdrLoadDll (IN PWSTR SearchPath OPTIONAL,
RtlLeaveCriticalSection(NtCurrentPeb()->LoaderLock); RtlLeaveCriticalSection(NtCurrentPeb()->LoaderLock);
if (NT_SUCCESS(Status)) if (NT_SUCCESS(Status))
{ {
*BaseAddress = Module->BaseAddress; *BaseAddress = Module->DllBase;
} }
} }
return Status; return Status;
@ -776,11 +776,11 @@ LdrLoadDll (IN PWSTR SearchPath OPTIONAL,
*/ */
NTSTATUS STDCALL NTSTATUS STDCALL
LdrFindEntryForAddress(PVOID Address, LdrFindEntryForAddress(PVOID Address,
PLDR_MODULE *Module) PLDR_DATA_TABLE_ENTRY *Module)
{ {
PLIST_ENTRY ModuleListHead; PLIST_ENTRY ModuleListHead;
PLIST_ENTRY Entry; PLIST_ENTRY Entry;
PLDR_MODULE ModulePtr; PLDR_DATA_TABLE_ENTRY ModulePtr;
DPRINT("LdrFindEntryForAddress(Address %p)\n", Address); DPRINT("LdrFindEntryForAddress(Address %p)\n", Address);
@ -798,12 +798,12 @@ LdrFindEntryForAddress(PVOID Address,
while (Entry != ModuleListHead) while (Entry != ModuleListHead)
{ {
ModulePtr = CONTAINING_RECORD(Entry, LDR_MODULE, InLoadOrderModuleList); ModulePtr = CONTAINING_RECORD(Entry, LDR_DATA_TABLE_ENTRY, InLoadOrderModuleList);
DPRINT("Scanning %wZ at %p\n", &ModulePtr->BaseDllName, ModulePtr->BaseAddress); DPRINT("Scanning %wZ at %p\n", &ModulePtr->BaseDllName, ModulePtr->DllBase);
if ((Address >= ModulePtr->BaseAddress) && if ((Address >= ModulePtr->DllBase) &&
(Address <= (ModulePtr->BaseAddress + ModulePtr->ResidentSize))) (Address <= (ModulePtr->DllBase + ModulePtr->SizeOfImage)))
{ {
*Module = ModulePtr; *Module = ModulePtr;
RtlLeaveCriticalSection(NtCurrentPeb()->LoaderLock); RtlLeaveCriticalSection(NtCurrentPeb()->LoaderLock);
@ -837,12 +837,12 @@ LdrFindEntryForAddress(PVOID Address,
*/ */
static NTSTATUS static NTSTATUS
LdrFindEntryForName(PUNICODE_STRING Name, LdrFindEntryForName(PUNICODE_STRING Name,
PLDR_MODULE *Module, PLDR_DATA_TABLE_ENTRY *Module,
BOOLEAN Ref) BOOLEAN Ref)
{ {
PLIST_ENTRY ModuleListHead; PLIST_ENTRY ModuleListHead;
PLIST_ENTRY Entry; PLIST_ENTRY Entry;
PLDR_MODULE ModulePtr; PLDR_DATA_TABLE_ENTRY ModulePtr;
BOOLEAN ContainsPath; BOOLEAN ContainsPath;
UNICODE_STRING AdjustedName; UNICODE_STRING AdjustedName;
unsigned i; unsigned i;
@ -897,7 +897,7 @@ LdrFindEntryForName(PUNICODE_STRING Name,
} }
while (Entry != ModuleListHead) while (Entry != ModuleListHead)
{ {
ModulePtr = CONTAINING_RECORD(Entry, LDR_MODULE, InLoadOrderModuleList); ModulePtr = CONTAINING_RECORD(Entry, LDR_DATA_TABLE_ENTRY, InLoadOrderModuleList);
DPRINT("Scanning %wZ %wZ\n", &ModulePtr->BaseDllName, &AdjustedName); DPRINT("Scanning %wZ %wZ\n", &ModulePtr->BaseDllName, &AdjustedName);
@ -947,7 +947,7 @@ LdrFixupForward(PCHAR ForwardName)
UNICODE_STRING DllName; UNICODE_STRING DllName;
NTSTATUS Status; NTSTATUS Status;
PCHAR p; PCHAR p;
PLDR_MODULE Module; PLDR_DATA_TABLE_ENTRY Module;
PVOID BaseAddress; PVOID BaseAddress;
strcpy(NameBuffer, ForwardName); strcpy(NameBuffer, ForwardName);
@ -982,9 +982,9 @@ LdrFixupForward(PCHAR ForwardName)
return NULL; return NULL;
} }
DPRINT("BaseAddress: %p\n", Module->BaseAddress); DPRINT("BaseAddress: %p\n", Module->DllBase);
return LdrGetExportByName(Module->BaseAddress, (PUCHAR)(p+1), -1); return LdrGetExportByName(Module->DllBase, (PUCHAR)(p+1), -1);
} }
return NULL; return NULL;
@ -1341,7 +1341,7 @@ LdrPerformRelocations(PIMAGE_NT_HEADERS NTHeaders,
static NTSTATUS static NTSTATUS
LdrpGetOrLoadModule(PWCHAR SerachPath, LdrpGetOrLoadModule(PWCHAR SerachPath,
PCHAR Name, PCHAR Name,
PLDR_MODULE* Module, PLDR_DATA_TABLE_ENTRY* Module,
BOOLEAN Load) BOOLEAN Load)
{ {
UNICODE_STRING DllName; UNICODE_STRING DllName;
@ -1373,8 +1373,8 @@ LdrpGetOrLoadModule(PWCHAR SerachPath,
} }
static NTSTATUS static NTSTATUS
LdrpProcessImportDirectoryEntry(PLDR_MODULE Module, LdrpProcessImportDirectoryEntry(PLDR_DATA_TABLE_ENTRY Module,
PLDR_MODULE ImportedModule, PLDR_DATA_TABLE_ENTRY ImportedModule,
PIMAGE_IMPORT_DESCRIPTOR ImportModuleDirectory) PIMAGE_IMPORT_DESCRIPTOR ImportModuleDirectory)
{ {
NTSTATUS Status; NTSTATUS Status;
@ -1391,16 +1391,16 @@ LdrpProcessImportDirectoryEntry(PLDR_MODULE Module,
} }
/* Get the import address list. */ /* Get the import address list. */
ImportAddressList = (PVOID *)(Module->BaseAddress + (ULONG_PTR)ImportModuleDirectory->FirstThunk); ImportAddressList = (PVOID *)(Module->DllBase + (ULONG_PTR)ImportModuleDirectory->FirstThunk);
/* Get the list of functions to import. */ /* Get the list of functions to import. */
if (ImportModuleDirectory->OriginalFirstThunk != 0) if (ImportModuleDirectory->OriginalFirstThunk != 0)
{ {
FunctionNameList = (PULONG) (Module->BaseAddress + (ULONG_PTR)ImportModuleDirectory->OriginalFirstThunk); FunctionNameList = (PULONG) (Module->DllBase + (ULONG_PTR)ImportModuleDirectory->OriginalFirstThunk);
} }
else else
{ {
FunctionNameList = (PULONG)(Module->BaseAddress + (ULONG_PTR)ImportModuleDirectory->FirstThunk); FunctionNameList = (PULONG)(Module->DllBase + (ULONG_PTR)ImportModuleDirectory->FirstThunk);
} }
/* Get the size of IAT. */ /* Get the size of IAT. */
@ -1430,7 +1430,7 @@ LdrpProcessImportDirectoryEntry(PLDR_MODULE Module,
if ((*FunctionNameList) & 0x80000000) if ((*FunctionNameList) & 0x80000000)
{ {
Ordinal = (*FunctionNameList) & 0x7fffffff; Ordinal = (*FunctionNameList) & 0x7fffffff;
*ImportAddressList = LdrGetExportByOrdinal(ImportedModule->BaseAddress, Ordinal); *ImportAddressList = LdrGetExportByOrdinal(ImportedModule->DllBase, Ordinal);
if ((*ImportAddressList) == NULL) if ((*ImportAddressList) == NULL)
{ {
DPRINT1("Failed to import #%ld from %wZ\n", Ordinal, &ImportedModule->FullDllName); DPRINT1("Failed to import #%ld from %wZ\n", Ordinal, &ImportedModule->FullDllName);
@ -1440,8 +1440,8 @@ LdrpProcessImportDirectoryEntry(PLDR_MODULE Module,
else else
{ {
IMAGE_IMPORT_BY_NAME *pe_name; IMAGE_IMPORT_BY_NAME *pe_name;
pe_name = RVA(Module->BaseAddress, *FunctionNameList); pe_name = RVA(Module->DllBase, *FunctionNameList);
*ImportAddressList = LdrGetExportByName(ImportedModule->BaseAddress, pe_name->Name, pe_name->Hint); *ImportAddressList = LdrGetExportByName(ImportedModule->DllBase, pe_name->Name, pe_name->Hint);
if ((*ImportAddressList) == NULL) if ((*ImportAddressList) == NULL)
{ {
DPRINT1("Failed to import %s from %wZ\n", pe_name->Name, &ImportedModule->FullDllName); DPRINT1("Failed to import %s from %wZ\n", pe_name->Name, &ImportedModule->FullDllName);
@ -1469,8 +1469,8 @@ LdrpProcessImportDirectoryEntry(PLDR_MODULE Module,
static NTSTATUS static NTSTATUS
LdrpProcessImportDirectory( LdrpProcessImportDirectory(
PLDR_MODULE Module, PLDR_DATA_TABLE_ENTRY Module,
PLDR_MODULE ImportedModule, PLDR_DATA_TABLE_ENTRY ImportedModule,
PCHAR ImportedName) PCHAR ImportedName)
{ {
NTSTATUS Status; NTSTATUS Status;
@ -1482,7 +1482,7 @@ LdrpProcessImportDirectory(
ImportModuleDirectory = (PIMAGE_IMPORT_DESCRIPTOR) ImportModuleDirectory = (PIMAGE_IMPORT_DESCRIPTOR)
RtlImageDirectoryEntryToData(Module->BaseAddress, RtlImageDirectoryEntryToData(Module->DllBase,
TRUE, TRUE,
IMAGE_DIRECTORY_ENTRY_IMPORT, IMAGE_DIRECTORY_ENTRY_IMPORT,
NULL); NULL);
@ -1493,7 +1493,7 @@ LdrpProcessImportDirectory(
while (ImportModuleDirectory->Name) while (ImportModuleDirectory->Name)
{ {
Name = (PCHAR)Module->BaseAddress + ImportModuleDirectory->Name; Name = (PCHAR)Module->DllBase + ImportModuleDirectory->Name;
if (0 == _stricmp(Name, ImportedName)) if (0 == _stricmp(Name, ImportedName))
{ {
Status = LdrpProcessImportDirectoryEntry(Module, Status = LdrpProcessImportDirectoryEntry(Module,
@ -1513,8 +1513,8 @@ LdrpProcessImportDirectory(
static NTSTATUS static NTSTATUS
LdrpAdjustImportDirectory(PLDR_MODULE Module, LdrpAdjustImportDirectory(PLDR_DATA_TABLE_ENTRY Module,
PLDR_MODULE ImportedModule, PLDR_DATA_TABLE_ENTRY ImportedModule,
PCHAR ImportedName) PCHAR ImportedName)
{ {
PIMAGE_IMPORT_DESCRIPTOR ImportModuleDirectory; PIMAGE_IMPORT_DESCRIPTOR ImportModuleDirectory;
@ -1534,7 +1534,7 @@ LdrpAdjustImportDirectory(PLDR_MODULE Module,
Module, &Module->BaseDllName, ImportedModule, &ImportedModule->BaseDllName, ImportedName); Module, &Module->BaseDllName, ImportedModule, &ImportedModule->BaseDllName, ImportedName);
ImportModuleDirectory = (PIMAGE_IMPORT_DESCRIPTOR) ImportModuleDirectory = (PIMAGE_IMPORT_DESCRIPTOR)
RtlImageDirectoryEntryToData(Module->BaseAddress, RtlImageDirectoryEntryToData(Module->DllBase,
TRUE, TRUE,
IMAGE_DIRECTORY_ENTRY_IMPORT, IMAGE_DIRECTORY_ENTRY_IMPORT,
NULL); NULL);
@ -1545,21 +1545,21 @@ LdrpAdjustImportDirectory(PLDR_MODULE Module,
while (ImportModuleDirectory->Name) while (ImportModuleDirectory->Name)
{ {
Name = (PCHAR)Module->BaseAddress + ImportModuleDirectory->Name; Name = (PCHAR)Module->DllBase + ImportModuleDirectory->Name;
if (0 == _stricmp(Name, (PCHAR)ImportedName)) if (0 == _stricmp(Name, (PCHAR)ImportedName))
{ {
/* Get the import address list. */ /* Get the import address list. */
ImportAddressList = (PVOID *)(Module->BaseAddress + (ULONG_PTR)ImportModuleDirectory->FirstThunk); ImportAddressList = (PVOID *)(Module->DllBase + (ULONG_PTR)ImportModuleDirectory->FirstThunk);
/* Get the list of functions to import. */ /* Get the list of functions to import. */
if (ImportModuleDirectory->OriginalFirstThunk != 0) if (ImportModuleDirectory->OriginalFirstThunk != 0)
{ {
FunctionNameList = (PULONG) (Module->BaseAddress + (ULONG_PTR)ImportModuleDirectory->OriginalFirstThunk); FunctionNameList = (PULONG) (Module->DllBase + (ULONG_PTR)ImportModuleDirectory->OriginalFirstThunk);
} }
else else
{ {
FunctionNameList = (PULONG)(Module->BaseAddress + (ULONG_PTR)ImportModuleDirectory->FirstThunk); FunctionNameList = (PULONG)(Module->DllBase + (ULONG_PTR)ImportModuleDirectory->FirstThunk);
} }
/* Get the size of IAT. */ /* Get the size of IAT. */
@ -1583,10 +1583,10 @@ LdrpAdjustImportDirectory(PLDR_MODULE Module,
return(Status); return(Status);
} }
NTHeaders = RtlImageNtHeader (ImportedModule->BaseAddress); NTHeaders = RtlImageNtHeader (ImportedModule->DllBase);
Start = (PVOID)NTHeaders->OptionalHeader.ImageBase; Start = (PVOID)NTHeaders->OptionalHeader.ImageBase;
End = Start + ImportedModule->ResidentSize; End = Start + ImportedModule->SizeOfImage;
Offset = ImportedModule->BaseAddress - Start; Offset = ImportedModule->DllBase - Start;
/* Walk through function list and fixup addresses. */ /* Walk through function list and fixup addresses. */
while (*FunctionNameList != 0L) while (*FunctionNameList != 0L)
@ -1636,7 +1636,7 @@ LdrpAdjustImportDirectory(PLDR_MODULE Module,
*/ */
static NTSTATUS static NTSTATUS
LdrFixupImports(IN PWSTR SearchPath OPTIONAL, LdrFixupImports(IN PWSTR SearchPath OPTIONAL,
IN PLDR_MODULE Module) IN PLDR_DATA_TABLE_ENTRY Module)
{ {
PIMAGE_IMPORT_DESCRIPTOR ImportModuleDirectory; PIMAGE_IMPORT_DESCRIPTOR ImportModuleDirectory;
PIMAGE_IMPORT_DESCRIPTOR ImportModuleDirectoryCurrent; PIMAGE_IMPORT_DESCRIPTOR ImportModuleDirectoryCurrent;
@ -1645,14 +1645,14 @@ LdrFixupImports(IN PWSTR SearchPath OPTIONAL,
PIMAGE_TLS_DIRECTORY TlsDirectory; PIMAGE_TLS_DIRECTORY TlsDirectory;
ULONG TlsSize = 0; ULONG TlsSize = 0;
NTSTATUS Status; NTSTATUS Status;
PLDR_MODULE ImportedModule; PLDR_DATA_TABLE_ENTRY ImportedModule;
PCHAR ImportedName; PCHAR ImportedName;
DPRINT("LdrFixupImports(SearchPath %x, Module %x)\n", SearchPath, Module); DPRINT("LdrFixupImports(SearchPath %x, Module %x)\n", SearchPath, Module);
/* Check for tls data */ /* Check for tls data */
TlsDirectory = (PIMAGE_TLS_DIRECTORY) TlsDirectory = (PIMAGE_TLS_DIRECTORY)
RtlImageDirectoryEntryToData(Module->BaseAddress, RtlImageDirectoryEntryToData(Module->DllBase,
TRUE, TRUE,
IMAGE_DIRECTORY_ENTRY_TLS, IMAGE_DIRECTORY_ENTRY_TLS,
NULL); NULL);
@ -1673,13 +1673,13 @@ LdrFixupImports(IN PWSTR SearchPath OPTIONAL,
* Process each import module. * Process each import module.
*/ */
ImportModuleDirectory = (PIMAGE_IMPORT_DESCRIPTOR) ImportModuleDirectory = (PIMAGE_IMPORT_DESCRIPTOR)
RtlImageDirectoryEntryToData(Module->BaseAddress, RtlImageDirectoryEntryToData(Module->DllBase,
TRUE, TRUE,
IMAGE_DIRECTORY_ENTRY_IMPORT, IMAGE_DIRECTORY_ENTRY_IMPORT,
NULL); NULL);
BoundImportDescriptor = (PIMAGE_BOUND_IMPORT_DESCRIPTOR) BoundImportDescriptor = (PIMAGE_BOUND_IMPORT_DESCRIPTOR)
RtlImageDirectoryEntryToData(Module->BaseAddress, RtlImageDirectoryEntryToData(Module->DllBase,
TRUE, TRUE,
IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT, IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT,
NULL); NULL);
@ -1737,7 +1737,7 @@ LdrFixupImports(IN PWSTR SearchPath OPTIONAL,
{ {
PIMAGE_BOUND_FORWARDER_REF BoundForwarderRef; PIMAGE_BOUND_FORWARDER_REF BoundForwarderRef;
ULONG i; ULONG i;
PLDR_MODULE ForwarderModule; PLDR_DATA_TABLE_ENTRY ForwarderModule;
PCHAR ForwarderName; PCHAR ForwarderName;
BoundForwarderRef = (PIMAGE_BOUND_FORWARDER_REF)(BoundImportDescriptorCurrent + 1); BoundForwarderRef = (PIMAGE_BOUND_FORWARDER_REF)(BoundImportDescriptorCurrent + 1);
@ -1821,7 +1821,7 @@ LdrFixupImports(IN PWSTR SearchPath OPTIONAL,
ImportModuleDirectoryCurrent = ImportModuleDirectory; ImportModuleDirectoryCurrent = ImportModuleDirectory;
while (ImportModuleDirectoryCurrent->Name) while (ImportModuleDirectoryCurrent->Name)
{ {
ImportedName = (PCHAR)Module->BaseAddress + ImportModuleDirectoryCurrent->Name; ImportedName = (PCHAR)Module->DllBase + ImportModuleDirectoryCurrent->Name;
TRACE_LDR("%wZ imports functions from %s\n", &Module->BaseDllName, ImportedName); TRACE_LDR("%wZ imports functions from %s\n", &Module->BaseDllName, ImportedName);
Status = LdrpGetOrLoadModule(SearchPath, ImportedName, &ImportedModule, TRUE); Status = LdrpGetOrLoadModule(SearchPath, ImportedName, &ImportedModule, TRUE);
@ -1886,14 +1886,14 @@ LdrFixupImports(IN PWSTR SearchPath OPTIONAL,
*/ */
PEPFUNC LdrPEStartup (PVOID ImageBase, PEPFUNC LdrPEStartup (PVOID ImageBase,
HANDLE SectionHandle, HANDLE SectionHandle,
PLDR_MODULE* Module, PLDR_DATA_TABLE_ENTRY* Module,
PWSTR FullDosName) PWSTR FullDosName)
{ {
NTSTATUS Status; NTSTATUS Status;
PEPFUNC EntryPoint = NULL; PEPFUNC EntryPoint = NULL;
PIMAGE_DOS_HEADER DosHeader; PIMAGE_DOS_HEADER DosHeader;
PIMAGE_NT_HEADERS NTHeaders; PIMAGE_NT_HEADERS NTHeaders;
PLDR_MODULE tmpModule; PLDR_DATA_TABLE_ENTRY tmpModule;
DPRINT("LdrPEStartup(ImageBase %x SectionHandle %x)\n", DPRINT("LdrPEStartup(ImageBase %x SectionHandle %x)\n",
ImageBase, (ULONG)SectionHandle); ImageBase, (ULONG)SectionHandle);
@ -1924,7 +1924,7 @@ PEPFUNC LdrPEStartup (PVOID ImageBase,
if (Module != NULL) if (Module != NULL)
{ {
*Module = LdrAddModuleEntry(ImageBase, NTHeaders, FullDosName); *Module = LdrAddModuleEntry(ImageBase, NTHeaders, FullDosName);
(*Module)->SectionHandle = SectionHandle; (*Module)->SectionPointer = SectionHandle;
} }
else else
{ {
@ -1989,13 +1989,13 @@ static NTSTATUS
LdrpLoadModule(IN PWSTR SearchPath OPTIONAL, LdrpLoadModule(IN PWSTR SearchPath OPTIONAL,
IN ULONG LoadFlags, IN ULONG LoadFlags,
IN PUNICODE_STRING Name, IN PUNICODE_STRING Name,
PLDR_MODULE *Module, PLDR_DATA_TABLE_ENTRY *Module,
PVOID *BaseAddress OPTIONAL) PVOID *BaseAddress OPTIONAL)
{ {
UNICODE_STRING AdjustedName; UNICODE_STRING AdjustedName;
UNICODE_STRING FullDosName; UNICODE_STRING FullDosName;
NTSTATUS Status; NTSTATUS Status;
PLDR_MODULE tmpModule; PLDR_DATA_TABLE_ENTRY tmpModule;
HANDLE SectionHandle; HANDLE SectionHandle;
ULONG ViewSize; ULONG ViewSize;
PVOID ImageBase; PVOID ImageBase;
@ -2019,7 +2019,7 @@ LdrpLoadModule(IN PWSTR SearchPath OPTIONAL,
RtlFreeUnicodeString(&AdjustedName); RtlFreeUnicodeString(&AdjustedName);
if (NULL != BaseAddress) if (NULL != BaseAddress)
{ {
*BaseAddress = (*Module)->BaseAddress; *BaseAddress = (*Module)->DllBase;
} }
} }
else else
@ -2104,7 +2104,7 @@ LdrpLoadModule(IN PWSTR SearchPath OPTIONAL,
} }
} }
*Module = LdrAddModuleEntry(ImageBase, NtHeaders, FullDosName.Buffer); *Module = LdrAddModuleEntry(ImageBase, NtHeaders, FullDosName.Buffer);
(*Module)->SectionHandle = SectionHandle; (*Module)->SectionPointer = SectionHandle;
if (ImageBase != (PVOID) NtHeaders->OptionalHeader.ImageBase) if (ImageBase != (PVOID) NtHeaders->OptionalHeader.ImageBase)
{ {
(*Module)->Flags |= IMAGE_NOT_AT_BASE; (*Module)->Flags |= IMAGE_NOT_AT_BASE;
@ -2132,14 +2132,14 @@ LdrpLoadModule(IN PWSTR SearchPath OPTIONAL,
} }
static NTSTATUS static NTSTATUS
LdrpUnloadModule(PLDR_MODULE Module, LdrpUnloadModule(PLDR_DATA_TABLE_ENTRY Module,
BOOLEAN Unload) BOOLEAN Unload)
{ {
PIMAGE_IMPORT_DESCRIPTOR ImportModuleDirectory; PIMAGE_IMPORT_DESCRIPTOR ImportModuleDirectory;
PIMAGE_BOUND_IMPORT_DESCRIPTOR BoundImportDescriptor; PIMAGE_BOUND_IMPORT_DESCRIPTOR BoundImportDescriptor;
PIMAGE_BOUND_IMPORT_DESCRIPTOR BoundImportDescriptorCurrent; PIMAGE_BOUND_IMPORT_DESCRIPTOR BoundImportDescriptorCurrent;
PCHAR ImportedName; PCHAR ImportedName;
PLDR_MODULE ImportedModule; PLDR_DATA_TABLE_ENTRY ImportedModule;
NTSTATUS Status; NTSTATUS Status;
LONG LoadCount; LONG LoadCount;
@ -2160,7 +2160,7 @@ LdrpUnloadModule(PLDR_MODULE Module,
else if (LoadCount == 1) else if (LoadCount == 1)
{ {
BoundImportDescriptor = (PIMAGE_BOUND_IMPORT_DESCRIPTOR) BoundImportDescriptor = (PIMAGE_BOUND_IMPORT_DESCRIPTOR)
RtlImageDirectoryEntryToData(Module->BaseAddress, RtlImageDirectoryEntryToData(Module->DllBase,
TRUE, TRUE,
IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT, IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT,
NULL); NULL);
@ -2194,7 +2194,7 @@ LdrpUnloadModule(PLDR_MODULE Module,
else else
{ {
ImportModuleDirectory = (PIMAGE_IMPORT_DESCRIPTOR) ImportModuleDirectory = (PIMAGE_IMPORT_DESCRIPTOR)
RtlImageDirectoryEntryToData(Module->BaseAddress, RtlImageDirectoryEntryToData(Module->DllBase,
TRUE, TRUE,
IMAGE_DIRECTORY_ENTRY_IMPORT, IMAGE_DIRECTORY_ENTRY_IMPORT,
NULL); NULL);
@ -2203,7 +2203,7 @@ LdrpUnloadModule(PLDR_MODULE Module,
/* dereferencing all imported modules, use the import descriptor */ /* dereferencing all imported modules, use the import descriptor */
while (ImportModuleDirectory->Name) while (ImportModuleDirectory->Name)
{ {
ImportedName = (PCHAR)Module->BaseAddress + ImportModuleDirectory->Name; ImportedName = (PCHAR)Module->DllBase + ImportModuleDirectory->Name;
TRACE_LDR("%wZ trys to unload %s\n", &Module->BaseDllName, ImportedName); TRACE_LDR("%wZ trys to unload %s\n", &Module->BaseDllName, ImportedName);
Status = LdrpGetOrLoadModule(NULL, ImportedName, &ImportedModule, FALSE); Status = LdrpGetOrLoadModule(NULL, ImportedName, &ImportedModule, FALSE);
if (!NT_SUCCESS(Status)) if (!NT_SUCCESS(Status))
@ -2242,7 +2242,7 @@ LdrpUnloadModule(PLDR_MODULE Module,
NTSTATUS STDCALL NTSTATUS STDCALL
LdrUnloadDll (IN PVOID BaseAddress) LdrUnloadDll (IN PVOID BaseAddress)
{ {
PLDR_MODULE Module; PLDR_DATA_TABLE_ENTRY Module;
NTSTATUS Status; NTSTATUS Status;
if (BaseAddress == NULL) if (BaseAddress == NULL)
@ -2273,7 +2273,7 @@ LdrDisableThreadCalloutsForDll(IN PVOID BaseAddress)
{ {
PLIST_ENTRY ModuleListHead; PLIST_ENTRY ModuleListHead;
PLIST_ENTRY Entry; PLIST_ENTRY Entry;
PLDR_MODULE Module; PLDR_DATA_TABLE_ENTRY Module;
NTSTATUS Status; NTSTATUS Status;
DPRINT("LdrDisableThreadCalloutsForDll (BaseAddress %x)\n", BaseAddress); DPRINT("LdrDisableThreadCalloutsForDll (BaseAddress %x)\n", BaseAddress);
@ -2284,11 +2284,11 @@ LdrDisableThreadCalloutsForDll(IN PVOID BaseAddress)
Entry = ModuleListHead->Flink; Entry = ModuleListHead->Flink;
while (Entry != ModuleListHead) while (Entry != ModuleListHead)
{ {
Module = CONTAINING_RECORD(Entry, LDR_MODULE, InLoadOrderModuleList); Module = CONTAINING_RECORD(Entry, LDR_DATA_TABLE_ENTRY, InLoadOrderModuleList);
DPRINT("BaseDllName %wZ BaseAddress %x\n", &Module->BaseDllName, Module->BaseAddress); DPRINT("BaseDllName %wZ BaseAddress %x\n", &Module->BaseDllName, Module->DllBase);
if (Module->BaseAddress == BaseAddress) if (Module->DllBase == BaseAddress)
{ {
if (Module->TlsIndex == -1) if (Module->TlsIndex == -1)
{ {
@ -2312,7 +2312,7 @@ LdrGetDllHandle(IN PWCHAR Path OPTIONAL,
IN PUNICODE_STRING DllName, IN PUNICODE_STRING DllName,
OUT PVOID* BaseAddress) OUT PVOID* BaseAddress)
{ {
PLDR_MODULE Module; PLDR_DATA_TABLE_ENTRY Module;
NTSTATUS Status; NTSTATUS Status;
TRACE_LDR("LdrGetDllHandle, searching for %wZ from %S\n", DllName, Path ? Path : L""); TRACE_LDR("LdrGetDllHandle, searching for %wZ from %S\n", DllName, Path ? Path : L"");
@ -2320,7 +2320,7 @@ LdrGetDllHandle(IN PWCHAR Path OPTIONAL,
/* NULL is the current executable */ /* NULL is the current executable */
if (DllName == NULL) if (DllName == NULL)
{ {
*BaseAddress = ExeModule->BaseAddress; *BaseAddress = ExeModule->DllBase;
DPRINT("BaseAddress %x\n", *BaseAddress); DPRINT("BaseAddress %x\n", *BaseAddress);
return STATUS_SUCCESS; return STATUS_SUCCESS;
} }
@ -2328,7 +2328,7 @@ LdrGetDllHandle(IN PWCHAR Path OPTIONAL,
Status = LdrFindEntryForName(DllName, &Module, FALSE); Status = LdrFindEntryForName(DllName, &Module, FALSE);
if (NT_SUCCESS(Status)) if (NT_SUCCESS(Status))
{ {
*BaseAddress = Module->BaseAddress; *BaseAddress = Module->DllBase;
return STATUS_SUCCESS; return STATUS_SUCCESS;
} }
@ -2406,7 +2406,7 @@ LdrpDetachProcess(BOOLEAN UnloadAll)
{ {
PLIST_ENTRY ModuleListHead; PLIST_ENTRY ModuleListHead;
PLIST_ENTRY Entry; PLIST_ENTRY Entry;
PLDR_MODULE Module; PLDR_DATA_TABLE_ENTRY Module;
static ULONG CallingCount = 0; static ULONG CallingCount = 0;
DPRINT("LdrpDetachProcess() called for %wZ\n", DPRINT("LdrpDetachProcess() called for %wZ\n",
@ -2418,7 +2418,7 @@ LdrpDetachProcess(BOOLEAN UnloadAll)
Entry = ModuleListHead->Blink; Entry = ModuleListHead->Blink;
while (Entry != ModuleListHead) while (Entry != ModuleListHead)
{ {
Module = CONTAINING_RECORD(Entry, LDR_MODULE, InInitializationOrderModuleList); Module = CONTAINING_RECORD(Entry, LDR_DATA_TABLE_ENTRY, InInitializationOrderModuleList);
if (((UnloadAll && Module->LoadCount <= 0) || Module->LoadCount == 0) && if (((UnloadAll && Module->LoadCount <= 0) || Module->LoadCount == 0) &&
Module->Flags & ENTRY_PROCESSED && Module->Flags & ENTRY_PROCESSED &&
!(Module->Flags & UNLOAD_IN_PROGRESS)) !(Module->Flags & UNLOAD_IN_PROGRESS))
@ -2451,7 +2451,7 @@ LdrpDetachProcess(BOOLEAN UnloadAll)
Entry = ModuleListHead->Blink; Entry = ModuleListHead->Blink;
while (Entry != ModuleListHead) while (Entry != ModuleListHead)
{ {
Module = CONTAINING_RECORD(Entry, LDR_MODULE, InInitializationOrderModuleList); Module = CONTAINING_RECORD(Entry, LDR_DATA_TABLE_ENTRY, InInitializationOrderModuleList);
Entry = Entry->Blink; Entry = Entry->Blink;
if (Module->Flags & UNLOAD_IN_PROGRESS && if (Module->Flags & UNLOAD_IN_PROGRESS &&
((UnloadAll && Module->LoadCount >= 0) || Module->LoadCount == 0)) ((UnloadAll && Module->LoadCount >= 0) || Module->LoadCount == 0))
@ -2460,8 +2460,8 @@ LdrpDetachProcess(BOOLEAN UnloadAll)
RemoveEntryList (&Module->InLoadOrderModuleList); RemoveEntryList (&Module->InLoadOrderModuleList);
RemoveEntryList (&Module->InInitializationOrderModuleList); RemoveEntryList (&Module->InInitializationOrderModuleList);
NtUnmapViewOfSection (NtCurrentProcess (), Module->BaseAddress); NtUnmapViewOfSection (NtCurrentProcess (), Module->DllBase);
NtClose (Module->SectionHandle); NtClose (Module->SectionPointer);
TRACE_LDR("%wZ unloaded\n", &Module->BaseDllName); TRACE_LDR("%wZ unloaded\n", &Module->BaseDllName);
@ -2500,7 +2500,7 @@ LdrpAttachProcess(VOID)
{ {
PLIST_ENTRY ModuleListHead; PLIST_ENTRY ModuleListHead;
PLIST_ENTRY Entry; PLIST_ENTRY Entry;
PLDR_MODULE Module; PLDR_DATA_TABLE_ENTRY Module;
BOOLEAN Result; BOOLEAN Result;
NTSTATUS Status = STATUS_SUCCESS; NTSTATUS Status = STATUS_SUCCESS;
@ -2511,7 +2511,7 @@ LdrpAttachProcess(VOID)
Entry = ModuleListHead->Flink; Entry = ModuleListHead->Flink;
while (Entry != ModuleListHead) while (Entry != ModuleListHead)
{ {
Module = CONTAINING_RECORD(Entry, LDR_MODULE, InInitializationOrderModuleList); Module = CONTAINING_RECORD(Entry, LDR_DATA_TABLE_ENTRY, InInitializationOrderModuleList);
if (!(Module->Flags & (LOAD_IN_PROGRESS|UNLOAD_IN_PROGRESS|ENTRY_PROCESSED))) if (!(Module->Flags & (LOAD_IN_PROGRESS|UNLOAD_IN_PROGRESS|ENTRY_PROCESSED)))
{ {
Module->Flags |= LOAD_IN_PROGRESS; Module->Flags |= LOAD_IN_PROGRESS;
@ -2560,7 +2560,7 @@ LdrpAttachThread (VOID)
{ {
PLIST_ENTRY ModuleListHead; PLIST_ENTRY ModuleListHead;
PLIST_ENTRY Entry; PLIST_ENTRY Entry;
PLDR_MODULE Module; PLDR_DATA_TABLE_ENTRY Module;
NTSTATUS Status; NTSTATUS Status;
DPRINT("LdrpAttachThread() called for %wZ\n", DPRINT("LdrpAttachThread() called for %wZ\n",
@ -2577,7 +2577,7 @@ LdrpAttachThread (VOID)
while (Entry != ModuleListHead) while (Entry != ModuleListHead)
{ {
Module = CONTAINING_RECORD(Entry, LDR_MODULE, InInitializationOrderModuleList); Module = CONTAINING_RECORD(Entry, LDR_DATA_TABLE_ENTRY, InInitializationOrderModuleList);
if (Module->Flags & PROCESS_ATTACH_CALLED && if (Module->Flags & PROCESS_ATTACH_CALLED &&
!(Module->Flags & DONT_CALL_FOR_THREAD) && !(Module->Flags & DONT_CALL_FOR_THREAD) &&
!(Module->Flags & UNLOAD_IN_PROGRESS)) !(Module->Flags & UNLOAD_IN_PROGRESS))
@ -2590,7 +2590,7 @@ LdrpAttachThread (VOID)
} }
Entry = NtCurrentPeb()->Ldr->InLoadOrderModuleList.Flink; Entry = NtCurrentPeb()->Ldr->InLoadOrderModuleList.Flink;
Module = CONTAINING_RECORD(Entry, LDR_MODULE, InLoadOrderModuleList); Module = CONTAINING_RECORD(Entry, LDR_DATA_TABLE_ENTRY, InLoadOrderModuleList);
LdrpTlsCallback(Module, DLL_THREAD_ATTACH); LdrpTlsCallback(Module, DLL_THREAD_ATTACH);
} }
@ -2610,7 +2610,7 @@ LdrShutdownThread (VOID)
{ {
PLIST_ENTRY ModuleListHead; PLIST_ENTRY ModuleListHead;
PLIST_ENTRY Entry; PLIST_ENTRY Entry;
PLDR_MODULE Module; PLDR_DATA_TABLE_ENTRY Module;
DPRINT("LdrShutdownThread() called for %wZ\n", DPRINT("LdrShutdownThread() called for %wZ\n",
&ExeModule->BaseDllName); &ExeModule->BaseDllName);
@ -2621,7 +2621,7 @@ LdrShutdownThread (VOID)
Entry = ModuleListHead->Blink; Entry = ModuleListHead->Blink;
while (Entry != ModuleListHead) while (Entry != ModuleListHead)
{ {
Module = CONTAINING_RECORD(Entry, LDR_MODULE, InInitializationOrderModuleList); Module = CONTAINING_RECORD(Entry, LDR_DATA_TABLE_ENTRY, InInitializationOrderModuleList);
if (Module->Flags & PROCESS_ATTACH_CALLED && if (Module->Flags & PROCESS_ATTACH_CALLED &&
!(Module->Flags & DONT_CALL_FOR_THREAD) && !(Module->Flags & DONT_CALL_FOR_THREAD) &&
@ -2670,7 +2670,7 @@ LdrQueryProcessModuleInformation(IN PMODULE_INFORMATION ModuleInformation OPTION
{ {
PLIST_ENTRY ModuleListHead; PLIST_ENTRY ModuleListHead;
PLIST_ENTRY Entry; PLIST_ENTRY Entry;
PLDR_MODULE Module; PLDR_DATA_TABLE_ENTRY Module;
PDEBUG_MODULE_INFORMATION ModulePtr = NULL; PDEBUG_MODULE_INFORMATION ModulePtr = NULL;
NTSTATUS Status = STATUS_SUCCESS; NTSTATUS Status = STATUS_SUCCESS;
ULONG UsedSize = sizeof(ULONG); ULONG UsedSize = sizeof(ULONG);
@ -2697,7 +2697,7 @@ LdrQueryProcessModuleInformation(IN PMODULE_INFORMATION ModuleInformation OPTION
while (Entry != ModuleListHead) while (Entry != ModuleListHead)
{ {
Module = CONTAINING_RECORD(Entry, LDR_MODULE, InLoadOrderModuleList); Module = CONTAINING_RECORD(Entry, LDR_DATA_TABLE_ENTRY, InLoadOrderModuleList);
DPRINT(" Module %wZ\n", DPRINT(" Module %wZ\n",
&Module->FullDllName); &Module->FullDllName);
@ -2709,8 +2709,8 @@ LdrQueryProcessModuleInformation(IN PMODULE_INFORMATION ModuleInformation OPTION
else if (ModuleInformation != NULL) else if (ModuleInformation != NULL)
{ {
ModulePtr->Reserved[0] = ModulePtr->Reserved[1] = 0; // FIXME: ?? ModulePtr->Reserved[0] = ModulePtr->Reserved[1] = 0; // FIXME: ??
ModulePtr->Base = Module->BaseAddress; ModulePtr->Base = Module->DllBase;
ModulePtr->Size = Module->ResidentSize; ModulePtr->Size = Module->SizeOfImage;
ModulePtr->Flags = Module->Flags; ModulePtr->Flags = Module->Flags;
ModulePtr->Index = 0; // FIXME: index ?? ModulePtr->Index = 0; // FIXME: index ??
ModulePtr->Unknown = 0; // FIXME: ?? ModulePtr->Unknown = 0; // FIXME: ??

View file

@ -101,7 +101,7 @@ RtlpQueryRemoteProcessModules(HANDLE ProcessHandle,
{ {
PROCESS_BASIC_INFORMATION pbiInfo; PROCESS_BASIC_INFORMATION pbiInfo;
PPEB_LDR_DATA ppldLdrData; PPEB_LDR_DATA ppldLdrData;
LDR_MODULE lmModule; LDR_DATA_TABLE_ENTRY lmModule;
PLIST_ENTRY pleListHead; PLIST_ENTRY pleListHead;
PLIST_ENTRY pleCurEntry; PLIST_ENTRY pleCurEntry;
@ -178,9 +178,9 @@ RtlpQueryRemoteProcessModules(HANDLE ProcessHandle,
/* read the current module */ /* read the current module */
Status = NtReadVirtualMemory ( ProcessHandle, Status = NtReadVirtualMemory ( ProcessHandle,
CONTAINING_RECORD(pleCurEntry, LDR_MODULE, InLoadOrderModuleList), CONTAINING_RECORD(pleCurEntry, LDR_DATA_TABLE_ENTRY, InLoadOrderModuleList),
&lmModule, &lmModule,
sizeof(LDR_MODULE), sizeof(LDR_DATA_TABLE_ENTRY),
NULL ); NULL );
/* Import module name from remote Process user space. */ /* Import module name from remote Process user space. */
@ -210,8 +210,8 @@ RtlpQueryRemoteProcessModules(HANDLE ProcessHandle,
else if (ModuleInformation != NULL) else if (ModuleInformation != NULL)
{ {
ModulePtr->Reserved[0] = ModulePtr->Reserved[1] = 0; // FIXME: ?? ModulePtr->Reserved[0] = ModulePtr->Reserved[1] = 0; // FIXME: ??
ModulePtr->Base = lmModule.BaseAddress; ModulePtr->Base = lmModule.DllBase;
ModulePtr->Size = lmModule.ResidentSize; ModulePtr->Size = lmModule.SizeOfImage;
ModulePtr->Flags = lmModule.Flags; ModulePtr->Flags = lmModule.Flags;
ModulePtr->Index = 0; // FIXME: ?? ModulePtr->Index = 0; // FIXME: ??
ModulePtr->Unknown = 0; // FIXME: ?? ModulePtr->Unknown = 0; // FIXME: ??

View file

@ -101,7 +101,7 @@ typedef struct _ENUM_PROCESS_MODULES_CONTEXT
NTSTATUS STDCALL NTSTATUS STDCALL
EnumProcessModulesCallback(IN HANDLE ProcessHandle, EnumProcessModulesCallback(IN HANDLE ProcessHandle,
IN PLDR_MODULE CurrentModule, IN PLDR_DATA_TABLE_ENTRY CurrentModule,
IN OUT PVOID CallbackContext) IN OUT PVOID CallbackContext)
{ {
PENUM_PROCESS_MODULES_CONTEXT Context = (PENUM_PROCESS_MODULES_CONTEXT)CallbackContext; PENUM_PROCESS_MODULES_CONTEXT Context = (PENUM_PROCESS_MODULES_CONTEXT)CallbackContext;
@ -113,7 +113,7 @@ EnumProcessModulesCallback(IN HANDLE ProcessHandle,
} }
/* return current process */ /* return current process */
*Context->lphModule = CurrentModule->BaseAddress; *Context->lphModule = CurrentModule->DllBase;
/* go to next array slot */ /* go to next array slot */
Context->lphModule++; Context->lphModule++;
@ -386,13 +386,13 @@ typedef struct _GET_MODULE_INFORMATION_CONTEXT
NTSTATUS STDCALL NTSTATUS STDCALL
GetModuleInformationCallback(IN HANDLE ProcessHandle, GetModuleInformationCallback(IN HANDLE ProcessHandle,
IN PLDR_MODULE CurrentModule, IN PLDR_DATA_TABLE_ENTRY CurrentModule,
IN OUT PVOID CallbackContext) IN OUT PVOID CallbackContext)
{ {
PGET_MODULE_INFORMATION_CONTEXT Context = (PGET_MODULE_INFORMATION_CONTEXT)CallbackContext; PGET_MODULE_INFORMATION_CONTEXT Context = (PGET_MODULE_INFORMATION_CONTEXT)CallbackContext;
/* found the module we were looking for */ /* found the module we were looking for */
if(CurrentModule->BaseAddress == Context->hModule) if(CurrentModule->DllBase == Context->hModule)
{ {
/* we want the module name */ /* we want the module name */
if(Context->Flags.bWantName) if(Context->Flags.bWantName)
@ -514,17 +514,17 @@ exitWithStatus:
ULONG nSize = Context->nBufSize; ULONG nSize = Context->nBufSize;
/* base address */ /* base address */
if(nSize >= sizeof(CurrentModule->BaseAddress)) if(nSize >= sizeof(CurrentModule->DllBase))
{ {
Context->lpmodinfo->lpBaseOfDll = CurrentModule->BaseAddress; Context->lpmodinfo->lpBaseOfDll = CurrentModule->DllBase;
nSize -= sizeof(CurrentModule->BaseAddress); nSize -= sizeof(CurrentModule->DllBase);
} }
/* image size */ /* image size */
if(nSize >= sizeof(CurrentModule->ResidentSize)) if(nSize >= sizeof(CurrentModule->SizeOfImage))
{ {
Context->lpmodinfo->SizeOfImage = CurrentModule->ResidentSize; Context->lpmodinfo->SizeOfImage = CurrentModule->SizeOfImage;
nSize -= sizeof(CurrentModule->ResidentSize); nSize -= sizeof(CurrentModule->SizeOfImage);
} }
/* entry point */ /* entry point */

View file

@ -35,7 +35,7 @@ NtSystemDebugControl(DEBUG_CONTROL_CODE ControlCode,
break; break;
case DebugDbgLoadSymbols: case DebugDbgLoadSymbols:
KDB_LOADUSERMODULE_HOOK((PLDR_MODULE) InputBuffer); KDB_LOADUSERMODULE_HOOK((PLDR_DATA_TABLE_ENTRY) InputBuffer);
break; break;
default: default:

View file

@ -18,7 +18,7 @@ struct _KD_DISPATCH_TABLE;
#if defined(KDBG) || defined(DBG) #if defined(KDBG) || defined(DBG)
VOID VOID
KdbSymLoadUserModuleSymbols(IN PLDR_MODULE LdrModule); KdbSymLoadUserModuleSymbols(IN PLDR_DATA_TABLE_ENTRY LdrModule);
VOID VOID
KdbSymFreeProcessSymbols(IN PEPROCESS Process); KdbSymFreeProcessSymbols(IN PEPROCESS Process);

View file

@ -51,7 +51,7 @@ KdbpSymFindUserModule(IN PVOID Address OPTIONAL,
OUT PKDB_MODULE_INFO pInfo) OUT PKDB_MODULE_INFO pInfo)
{ {
PLIST_ENTRY current_entry; PLIST_ENTRY current_entry;
PLDR_MODULE current; PLDR_DATA_TABLE_ENTRY current;
PEPROCESS CurrentProcess; PEPROCESS CurrentProcess;
PPEB Peb = NULL; PPEB Peb = NULL;
INT Count = 0; INT Count = 0;
@ -72,10 +72,10 @@ KdbpSymFindUserModule(IN PVOID Address OPTIONAL,
while (current_entry != &Peb->Ldr->InLoadOrderModuleList && while (current_entry != &Peb->Ldr->InLoadOrderModuleList &&
current_entry != NULL) current_entry != NULL)
{ {
current = CONTAINING_RECORD(current_entry, LDR_MODULE, InLoadOrderModuleList); current = CONTAINING_RECORD(current_entry, LDR_DATA_TABLE_ENTRY, InLoadOrderModuleList);
if ((Address != NULL && (Address >= (PVOID)current->BaseAddress && if ((Address != NULL && (Address >= (PVOID)current->DllBase &&
Address < (PVOID)((char *)current->BaseAddress + current->ResidentSize))) || Address < (PVOID)((char *)current->DllBase + current->SizeOfImage))) ||
(Name != NULL && _wcsicmp(current->BaseDllName.Buffer, Name) == 0) || (Name != NULL && _wcsicmp(current->BaseDllName.Buffer, Name) == 0) ||
(Index >= 0 && Count++ == Index)) (Index >= 0 && Count++ == Index))
{ {
@ -84,8 +84,8 @@ KdbpSymFindUserModule(IN PVOID Address OPTIONAL,
Length = 255; Length = 255;
wcsncpy(pInfo->Name, current->BaseDllName.Buffer, Length); wcsncpy(pInfo->Name, current->BaseDllName.Buffer, Length);
pInfo->Name[Length] = L'\0'; pInfo->Name[Length] = L'\0';
pInfo->Base = (ULONG_PTR)current->BaseAddress; pInfo->Base = (ULONG_PTR)current->DllBase;
pInfo->Size = current->ResidentSize; pInfo->Size = current->SizeOfImage;
pInfo->RosSymInfo = current->RosSymInfo; pInfo->RosSymInfo = current->RosSymInfo;
return TRUE; return TRUE;
} }
@ -488,7 +488,7 @@ KdbpSymUnloadModuleSymbols(IN PROSSYM_INFO RosSymInfo)
* \param LdrModule Pointer to the module to load symbols for. * \param LdrModule Pointer to the module to load symbols for.
*/ */
VOID VOID
KdbSymLoadUserModuleSymbols(IN PLDR_MODULE LdrModule) KdbSymLoadUserModuleSymbols(IN PLDR_DATA_TABLE_ENTRY LdrModule)
{ {
static WCHAR Prefix[] = L"\\??\\"; static WCHAR Prefix[] = L"\\??\\";
UNICODE_STRING KernelName; UNICODE_STRING KernelName;
@ -521,7 +521,7 @@ VOID
KdbSymFreeProcessSymbols(IN PEPROCESS Process) KdbSymFreeProcessSymbols(IN PEPROCESS Process)
{ {
PLIST_ENTRY CurrentEntry; PLIST_ENTRY CurrentEntry;
PLDR_MODULE Current; PLDR_DATA_TABLE_ENTRY Current;
PEPROCESS CurrentProcess; PEPROCESS CurrentProcess;
PPEB Peb; PPEB Peb;
@ -538,7 +538,7 @@ KdbSymFreeProcessSymbols(IN PEPROCESS Process)
while (CurrentEntry != &Peb->Ldr->InLoadOrderModuleList && while (CurrentEntry != &Peb->Ldr->InLoadOrderModuleList &&
CurrentEntry != NULL) CurrentEntry != NULL)
{ {
Current = CONTAINING_RECORD(CurrentEntry, LDR_MODULE, InLoadOrderModuleList); Current = CONTAINING_RECORD(CurrentEntry, LDR_DATA_TABLE_ENTRY, InLoadOrderModuleList);
KdbpSymUnloadModuleSymbols(Current->RosSymInfo); KdbpSymUnloadModuleSymbols(Current->RosSymInfo);

View file

@ -20,7 +20,7 @@ BOOLEAN
print_user_address(PVOID address) print_user_address(PVOID address)
{ {
PLIST_ENTRY current_entry; PLIST_ENTRY current_entry;
PLDR_MODULE current; PLDR_DATA_TABLE_ENTRY current;
PEPROCESS CurrentProcess; PEPROCESS CurrentProcess;
PPEB Peb = NULL; PPEB Peb = NULL;
ULONG_PTR RelativeAddress; ULONG_PTR RelativeAddress;
@ -51,13 +51,13 @@ print_user_address(PVOID address)
current_entry != NULL) current_entry != NULL)
{ {
current = current =
CONTAINING_RECORD(current_entry, LDR_MODULE, InLoadOrderModuleList); CONTAINING_RECORD(current_entry, LDR_DATA_TABLE_ENTRY, InLoadOrderModuleList);
if (address >= (PVOID)current->BaseAddress && if (address >= (PVOID)current->DllBase &&
address < (PVOID)((char*)current->BaseAddress + current->ResidentSize)) address < (PVOID)((char*)current->DllBase + current->SizeOfImage))
{ {
RelativeAddress = RelativeAddress =
(ULONG_PTR) address - (ULONG_PTR)current->BaseAddress; (ULONG_PTR) address - (ULONG_PTR)current->DllBase;
DbgPrint("<%wZ: %x>", &current->BaseDllName, RelativeAddress); DbgPrint("<%wZ: %x>", &current->BaseDllName, RelativeAddress);
return(TRUE); return(TRUE);
} }

View file

@ -3,6 +3,7 @@
#include <windows.h> #include <windows.h>
#define NTOS_MODE_USER #define NTOS_MODE_USER
#define READY_FOR_NEW_NTDLL
#include <ndk/ntndk.h> #include <ndk/ntndk.h>
#include <rosrtl/string.h> #include <rosrtl/string.h>