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 Entry;
PLDR_MODULE Module;
PLDR_DATA_TABLE_ENTRY Module;
PPEB_LDR_DATA Ldr;
ENTER_FUNC();
@ -179,7 +179,7 @@ BOOLEAN ListUserModules( PPEB peb )
Entry = UserModuleListHead->Flink;
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);
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)
(
IN HANDLE ProcessHandle,
IN PLDR_MODULE CurrentModule,
IN PLDR_DATA_TABLE_ENTRY CurrentModule,
IN OUT PVOID CallbackContext
);

View file

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

View file

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

View file

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

View file

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

View file

@ -49,7 +49,7 @@ PsaEnumerateProcessModules(IN HANDLE ProcessHandle,
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 */
Status = Callback(ProcessHandle, LoaderModule, CallbackContext);
@ -73,7 +73,7 @@ PsaEnumerateProcessModules(IN HANDLE ProcessHandle,
{
PROCESS_BASIC_INFORMATION BasicInformation;
PPEB_LDR_DATA LoaderData;
LDR_MODULE LoaderModule;
LDR_DATA_TABLE_ENTRY LoaderModule;
PLIST_ENTRY ListHead, Current;
/* query the process basic information (includes the PEB address) */
@ -116,7 +116,7 @@ PsaEnumerateProcessModules(IN HANDLE ProcessHandle,
{
/* read the current module */
Status = NtReadVirtualMemory(ProcessHandle,
CONTAINING_RECORD(Current, LDR_MODULE, InLoadOrderModuleList),
CONTAINING_RECORD(Current, LDR_DATA_TABLE_ENTRY, InLoadOrderModuleList),
&LoaderModule,
sizeof(LoaderModule),
NULL);

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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