- Replace MODULE_OBJECT with LDR_DATA_TABLE_ENTRY. - Export PsGetCurrentThread and PsGetCurrentProcess. Modified: trunk/reactos/ntoskrnl/include/internal/io.h Modified: trunk/reactos/ntoskrnl/include/internal/kd.h Modified: trunk/reactos/ntoskrnl/include/internal/ldr.h Deleted: trunk/reactos/ntoskrnl/include/internal/module.h Modified: trunk/reactos/ntoskrnl/include/internal/ntoskrnl.h Modified: trunk/reactos/ntoskrnl/include/internal/tag.h Modified: trunk/reactos/ntoskrnl/io/driver.c Modified: trunk/reactos/ntoskrnl/io/iomgr.c Modified: trunk/reactos/ntoskrnl/io/pnpmgr.c Modified: trunk/reactos/ntoskrnl/kd/kdio.c Modified: trunk/reactos/ntoskrnl/kd/wrappers/gdbstub.c Modified: trunk/reactos/ntoskrnl/kdbg/kdb_symbols.c Modified: trunk/reactos/ntoskrnl/ke/bug.c Modified: trunk/reactos/ntoskrnl/ke/i386/exp.c Modified: trunk/reactos/ntoskrnl/ldr/loader.c Modified: trunk/reactos/ntoskrnl/mm/mm.c Modified: trunk/reactos/ntoskrnl/mm/pagefile.c Modified: trunk/reactos/ntoskrnl/ntoskrnl.def _____
Modified: trunk/reactos/ntoskrnl/include/internal/io.h --- trunk/reactos/ntoskrnl/include/internal/io.h 2005-07-30 13:49:41 UTC (rev 16893) +++ trunk/reactos/ntoskrnl/include/internal/io.h 2005-07-30 16:25:35 UTC (rev 16894) @@ -350,14 +350,14 @@
FASTCALL IopLoadServiceModule( IN PUNICODE_STRING ServiceName, - OUT PMODULE_OBJECT *ModuleObject + OUT PLDR_DATA_TABLE_ENTRY *ModuleObject );
NTSTATUS FASTCALL IopInitializeDriverModule( IN PDEVICE_NODE DeviceNode, - IN PMODULE_OBJECT ModuleObject, + IN PLDR_DATA_TABLE_ENTRY ModuleObject, IN PUNICODE_STRING ServiceName, IN BOOLEAN FileSystemDriver, OUT PDRIVER_OBJECT *DriverObject _____
Modified: trunk/reactos/ntoskrnl/include/internal/kd.h --- trunk/reactos/ntoskrnl/include/internal/kd.h 2005-07-30 13:49:41 UTC (rev 16893) +++ trunk/reactos/ntoskrnl/include/internal/kd.h 2005-07-30 16:25:35 UTC (rev 16894) @@ -17,19 +17,19 @@
VOID KdbSymLoadDriverSymbols( IN PUNICODE_STRING Filename, - IN PMODULE_OBJECT Module + IN PLDR_DATA_TABLE_ENTRY Module );
VOID -KdbSymUnloadDriverSymbols(IN PMODULE_OBJECT ModuleObject); +KdbSymUnloadDriverSymbols(IN PLDR_DATA_TABLE_ENTRY ModuleObject);
VOID KdbSymProcessBootSymbols(IN PCHAR FileName);
VOID KdbSymInit( - IN PMODULE_TEXT_SECTION NtoskrnlTextSection, - IN PMODULE_TEXT_SECTION LdrHalTextSection + IN PLDR_DATA_TABLE_ENTRY NtoskrnlTextSection, + IN PLDR_DATA_TABLE_ENTRY LdrHalTextSection );
BOOLEAN _____
Modified: trunk/reactos/ntoskrnl/include/internal/ldr.h --- trunk/reactos/ntoskrnl/include/internal/ldr.h 2005-07-30 13:49:41 UTC (rev 16893) +++ trunk/reactos/ntoskrnl/include/internal/ldr.h 2005-07-30 16:25:35 UTC (rev 16894) @@ -99,13 +99,13 @@
NTSTATUS LdrLoadModule( PUNICODE_STRING Filename, - PMODULE_OBJECT *ModuleObject + PLDR_DATA_TABLE_ENTRY *ModuleObject );
NTSTATUS -LdrUnloadModule(PMODULE_OBJECT ModuleObject); +LdrUnloadModule(PLDR_DATA_TABLE_ENTRY ModuleObject);
-PMODULE_OBJECT +PLDR_DATA_TABLE_ENTRY LdrGetModuleObject(PUNICODE_STRING ModuleName);
#endif /* __INCLUDE_INTERNAL_LDR_H */ _____
Deleted: trunk/reactos/ntoskrnl/include/internal/module.h --- trunk/reactos/ntoskrnl/include/internal/module.h 2005-07-30 13:49:41 UTC (rev 16893) +++ trunk/reactos/ntoskrnl/include/internal/module.h 2005-07-30 16:25:35 UTC (rev 16894) @@ -1,53 +0,0 @@
-#ifndef __MODULE_H -#define __MODULE_H - -typedef struct _MODULE_TEXT_SECTION -{ - ULONG Base; - ULONG Length; - LIST_ENTRY ListEntry; - PWCH Name; - PIMAGE_OPTIONAL_HEADER OptionalHeader; - PROSSYM_INFO RosSymInfo; -} MODULE_TEXT_SECTION, *PMODULE_TEXT_SECTION; - -typedef struct _MODULE_OBJECT -{ - CSHORT ObjectType; - CSHORT ObjectSize; - PVOID Base; - ULONG Length; - ULONG Flags; - PVOID EntryPoint; - LIST_ENTRY ListEntry; - UNICODE_STRING FullName; - UNICODE_STRING BaseName; - PMODULE_TEXT_SECTION TextSection; - union - { - struct - { - PIMAGE_FILE_HEADER FileHeader; - PIMAGE_OPTIONAL_HEADER OptionalHeader; - PIMAGE_SECTION_HEADER SectionList; - } PE; - } Image; -} MODULE_OBJECT, *PMODULE_OBJECT; - -typedef MODULE_OBJECT MODULE, *PMODULE; - -#define MODULE_FLAG_BIN 0x0001 -#define MODULE_FLAG_MZ 0x0002 -#define MODULE_FLAG_NE 0x0004 -#define MODULE_FLAG_PE 0x0008 -#define MODULE_FLAG_COFF 0x0010 - -typedef struct _INSTANCE -{ - HANDLE ModuleHandle; -} INSTANCE, *PINSTANCE; - -BOOLEAN process_boot_module(unsigned int start); - -#endif - _____
Modified: trunk/reactos/ntoskrnl/include/internal/ntoskrnl.h --- trunk/reactos/ntoskrnl/include/internal/ntoskrnl.h 2005-07-30 13:49:41 UTC (rev 16893) +++ trunk/reactos/ntoskrnl/include/internal/ntoskrnl.h 2005-07-30 16:25:35 UTC (rev 16894) @@ -14,7 +14,6 @@
#include "ke.h" #include "i386/mm.h" #include "i386/fpu.h" -#include "module.h" #include "ob.h" #include "mm.h" #include "ps.h" _____
Modified: trunk/reactos/ntoskrnl/include/internal/tag.h --- trunk/reactos/ntoskrnl/include/internal/tag.h 2005-07-30 13:49:41 UTC (rev 16893) +++ trunk/reactos/ntoskrnl/include/internal/tag.h 2005-07-30 16:25:35 UTC (rev 16894) @@ -87,7 +87,6 @@
#define TAG_DRIVER_MEM TAG('D', 'R', 'V', 'M') /* drvm */ #define TAG_MODULE_OBJECT TAG('k', 'l', 'm', 'o') /* klmo - kernel ldr module object */ #define TAG_LDR_WSTR TAG('k', 'l', 'w', 's') /* klws - kernel ldr wide string */ -#define TAG_MODULE_TEXT_SECTION TAG('k', 'l', 'm', 't') /* klmt - kernel ldr module text */
/* formerly located in lpc/connect */ #define TAG_LPC_CONNECT_MESSAGE TAG('L', 'P', 'C', 'C') _____
Modified: trunk/reactos/ntoskrnl/io/driver.c --- trunk/reactos/ntoskrnl/io/driver.c 2005-07-30 13:49:41 UTC (rev 16893) +++ trunk/reactos/ntoskrnl/io/driver.c 2005-07-30 16:25:35 UTC (rev 16894) @@ -23,7 +23,7 @@
NTSTATUS LdrProcessModule(PVOID ModuleLoadBase, PUNICODE_STRING ModuleName, - PMODULE_OBJECT *ModuleObject); + PLDR_DATA_TABLE_ENTRY *ModuleObject);
typedef struct _SERVICE_GROUP { @@ -432,7 +432,7 @@ NTSTATUS FASTCALL IopLoadServiceModule( IN PUNICODE_STRING ServiceName, - OUT PMODULE_OBJECT *ModuleObject) + OUT PLDR_DATA_TABLE_ENTRY *ModuleObject) { RTL_QUERY_REGISTRY_TABLE QueryTable[3]; ULONG ServiceStart; @@ -591,7 +591,7 @@ NTSTATUS FASTCALL IopInitializeDriverModule( IN PDEVICE_NODE DeviceNode, - IN PMODULE_OBJECT ModuleObject, + IN PLDR_DATA_TABLE_ENTRY ModuleObject, IN PUNICODE_STRING ServiceName, IN BOOLEAN FileSystemDriver, OUT PDRIVER_OBJECT *DriverObject) @@ -625,8 +625,8 @@ ServiceName, 0, FileSystemDriver, - ModuleObject->Base, - ModuleObject->Length); + ModuleObject->DllBase, + ModuleObject->SizeOfImage);
if (!NT_SUCCESS(Status)) { @@ -673,7 +673,7 @@ PDEVICE_NODE DeviceNode = Context; UNICODE_STRING ServiceName; PWCHAR Filters; - PMODULE_OBJECT ModuleObject; + PLDR_DATA_TABLE_ENTRY ModuleObject; PDRIVER_OBJECT DriverObject; NTSTATUS Status;
@@ -1187,7 +1187,7 @@ PCHAR FileName, ULONG ModuleLength) { - PMODULE_OBJECT ModuleObject; + PLDR_DATA_TABLE_ENTRY ModuleObject; PDEVICE_NODE DeviceNode; PDRIVER_OBJECT DriverObject; NTSTATUS Status; @@ -1519,7 +1519,7 @@ UNICODE_STRING ServiceName; UNICODE_STRING ObjectName; PDRIVER_OBJECT DriverObject; - PMODULE_OBJECT ModuleObject; + PLDR_DATA_TABLE_ENTRY ModuleObject; NTSTATUS Status; LPWSTR Start;
@@ -1857,7 +1857,7 @@ NTSTATUS Status; ULONG Type; PDEVICE_NODE DeviceNode; - PMODULE_OBJECT ModuleObject; + PLDR_DATA_TABLE_ENTRY ModuleObject; PDRIVER_OBJECT DriverObject; WCHAR *cur;
_____
Modified: trunk/reactos/ntoskrnl/io/iomgr.c --- trunk/reactos/ntoskrnl/io/iomgr.c 2005-07-30 13:49:41 UTC (rev 16893) +++ trunk/reactos/ntoskrnl/io/iomgr.c 2005-07-30 16:25:35 UTC (rev 16894) @@ -321,7 +321,7 @@
{ PDEVICE_NODE DeviceNode; PDRIVER_OBJECT DriverObject; - MODULE_OBJECT ModuleObject; + LDR_DATA_TABLE_ENTRY ModuleObject; NTSTATUS Status;
PnpInit2(); @@ -342,8 +342,8 @@ return; }
- ModuleObject.Base = NULL; - ModuleObject.Length = 0; + ModuleObject.DllBase = NULL; + ModuleObject.SizeOfImage = 0; ModuleObject.EntryPoint = RawFsDriverEntry;
Status = IopInitializeDriverModule( _____
Modified: trunk/reactos/ntoskrnl/io/pnpmgr.c --- trunk/reactos/ntoskrnl/io/pnpmgr.c 2005-07-30 13:49:41 UTC (rev 16893) +++ trunk/reactos/ntoskrnl/io/pnpmgr.c 2005-07-30 16:25:35 UTC (rev 16894) @@ -1702,7 +1702,7 @@
!IopDeviceNodeHasFlag(DeviceNode, DNF_ADDED) && !IopDeviceNodeHasFlag(DeviceNode, DNF_STARTED)) { - PMODULE_OBJECT ModuleObject; + PLDR_DATA_TABLE_ENTRY ModuleObject; PDRIVER_OBJECT DriverObject;
Status = IopLoadServiceModule(&DeviceNode->ServiceName, &ModuleObject); _____
Modified: trunk/reactos/ntoskrnl/kd/kdio.c --- trunk/reactos/ntoskrnl/kd/kdio.c 2005-07-30 13:49:41 UTC (rev 16893) +++ trunk/reactos/ntoskrnl/kd/kdio.c 2005-07-30 16:25:35 UTC (rev 16894) @@ -89,12 +89,13 @@
KdpInitDebugLog(PKD_DISPATCH_TABLE DispatchTable, ULONG BootPhase) { - if (!KdpDebugMode.File) return; NTSTATUS Status; OBJECT_ATTRIBUTES ObjectAttributes; UNICODE_STRING FileName; IO_STATUS_BLOCK Iosb;
+ if (!KdpDebugMode.File) return; + if (BootPhase == 0) { /* Write out the functions that we support for now */ _____
Modified: trunk/reactos/ntoskrnl/kd/wrappers/gdbstub.c --- trunk/reactos/ntoskrnl/kd/wrappers/gdbstub.c 2005-07-30 13:49:41 UTC (rev 16893) +++ trunk/reactos/ntoskrnl/kd/wrappers/gdbstub.c 2005-07-30 16:25:35 UTC (rev 16894) @@ -1458,7 +1458,7 @@
KdGdbListModules() { PLIST_ENTRY CurrentEntry; - PMODULE_OBJECT Current; + PLDR_DATA_TABLE_ENTRY Current; ULONG ModuleCount;
DPRINT1("\n"); @@ -1468,10 +1468,10 @@ CurrentEntry = ModuleListHead.Flink; while (CurrentEntry != (&ModuleListHead)) { - Current = CONTAINING_RECORD (CurrentEntry, MODULE_OBJECT, ListEntry); + Current = CONTAINING_RECORD (CurrentEntry, LDR_DATA_TABLE_ENTRY, InLoadOrderModuleList);
- DbgPrint ("Module %S Base 0x%.08x Length 0x%.08x\n", - Current->BaseName.Buffer, Current->Base, Current->Length); + DbgPrint ("Module %wZ Base 0x%.08x Length 0x%.08x\n", + &Current->BaseDllName, Current->DllBase, Current->SizeOfImage);
ModuleCount++; CurrentEntry = CurrentEntry->Flink; _____
Modified: trunk/reactos/ntoskrnl/kdbg/kdb_symbols.c --- trunk/reactos/ntoskrnl/kdbg/kdb_symbols.c 2005-07-30 13:49:41 UTC (rev 16893) +++ trunk/reactos/ntoskrnl/kdbg/kdb_symbols.c 2005-07-30 16:25:35 UTC (rev 16894) @@ -108,26 +108,27 @@
OUT PKDB_MODULE_INFO pInfo) { PLIST_ENTRY current_entry; - MODULE_TEXT_SECTION* current; - extern LIST_ENTRY ModuleTextListHead; + PLDR_DATA_TABLE_ENTRY current; + extern LIST_ENTRY ModuleListHead; INT Count = 0;
- current_entry = ModuleTextListHead.Flink; + current_entry = ModuleListHead.Flink;
- while (current_entry != &ModuleTextListHead && - current_entry != NULL) + while (current_entry != &ModuleListHead) { - current = CONTAINING_RECORD(current_entry, MODULE_TEXT_SECTION, ListEntry); + current = CONTAINING_RECORD(current_entry, LDR_DATA_TABLE_ENTRY, InLoadOrderModuleList);
- if ((Address != NULL && (Address >= (PVOID)current->Base && - Address < (PVOID)(current->Base + current->Length))) || - (Name != NULL && _wcsicmp(current->Name, Name) == 0) || + if ((Address != NULL && (Address >= (PVOID)current->DllBase && + Address < (PVOID)((ULONG_PTR)current->DllBase + current->SizeOfImage))) || + (Name != NULL && _wcsnicmp(current->BaseDllName.Buffer, Name, + current->BaseDllName.Length / sizeof(WCHAR)) == 0) || (Index >= 0 && Count++ == Index)) { - wcsncpy(pInfo->Name, current->Name, 255); + wcsncpy(pInfo->Name, current->BaseDllName.Buffer, + min(255, current->BaseDllName.Length / sizeof(WCHAR))); pInfo->Name[255] = L'\0'; - pInfo->Base = (ULONG_PTR)current->Base; - pInfo->Size = current->Length; + pInfo->Base = (ULONG_PTR)current->DllBase; + pInfo->Size = current->SizeOfImage; pInfo->RosSymInfo = current->RosSymInfo; return TRUE; } @@ -553,30 +554,30 @@ /*! \brief Load symbol info for a driver. * * \param Filename Filename of the driver. - * \param Module Pointer to the driver MODULE_OBJECT. + * \param Module Pointer to the driver LDR_DATA_TABLE_ENTRY. */ VOID KdbSymLoadDriverSymbols(IN PUNICODE_STRING Filename, - IN PMODULE_OBJECT Module) + IN PLDR_DATA_TABLE_ENTRY Module) { /* Load symbols for the image if available */ DPRINT("Loading driver %wZ symbols (driver @ %08x)\n", Filename, Module->Base);
- Module->TextSection->RosSymInfo = NULL; + Module->RosSymInfo = NULL;
- KdbpSymLoadModuleSymbols(Filename, &Module->TextSection->RosSymInfo); + KdbpSymLoadModuleSymbols(Filename, (PROSSYM_INFO*)&Module->RosSymInfo); }
/*! \brief Unloads symbol info for a driver. * - * \param ModuleObject Pointer to the driver MODULE_OBJECT. + * \param ModuleObject Pointer to the driver LDR_DATA_TABLE_ENTRY. */ VOID -KdbSymUnloadDriverSymbols(IN PMODULE_OBJECT ModuleObject) +KdbSymUnloadDriverSymbols(IN PLDR_DATA_TABLE_ENTRY ModuleObject) { /* Unload symbols for module if available */ - KdbpSymUnloadModuleSymbols(ModuleObject->TextSection->RosSymInfo); - ModuleObject->TextSection->RosSymInfo = NULL; + KdbpSymUnloadModuleSymbols(ModuleObject->RosSymInfo); + ModuleObject->RosSymInfo = NULL; }
/*! \brief Called when a symbol file is loaded by the loader? @@ -591,7 +592,7 @@ VOID KdbSymProcessBootSymbols(IN PCHAR FileName) { - PMODULE_OBJECT ModuleObject; + PLDR_DATA_TABLE_ENTRY ModuleObject; UNICODE_STRING UnicodeString; PLOADER_MODULE KeLoaderModules = (PLOADER_MODULE)KeLoaderBlock.ModsAddr; ANSI_STRING AnsiString; @@ -618,7 +619,7 @@ { if (! LoadSymbols) { - ModuleObject->TextSection->RosSymInfo = NULL; + ModuleObject->RosSymInfo = NULL; return; }
@@ -632,16 +633,16 @@ if (i < KeLoaderBlock.ModsCount) { KeLoaderModules[i].Reserved = 1; - if (ModuleObject->TextSection->RosSymInfo != NULL) + if (ModuleObject->RosSymInfo != NULL) { - KdbpSymRemoveCachedFile(ModuleObject->TextSection->RosSymInfo); + KdbpSymRemoveCachedFile(ModuleObject->RosSymInfo); }
if (IsRaw) { if (! RosSymCreateFromRaw((PVOID) KeLoaderModules[i].ModStart, KeLoaderModules[i].ModEnd - KeLoaderModules[i].ModStart, - &ModuleObject->TextSection->RosSymInfo)) + (PROSSYM_INFO*)&ModuleObject->RosSymInfo)) { return; } @@ -650,7 +651,7 @@ { if (! RosSymCreateFromMem((PVOID) KeLoaderModules[i].ModStart, KeLoaderModules[i].ModEnd - KeLoaderModules[i].ModStart, - &ModuleObject->TextSection->RosSymInfo)) + (PROSSYM_INFO*)&ModuleObject->RosSymInfo)) { return; } @@ -659,33 +660,33 @@ /* add file to cache */ RtlInitAnsiString(&AnsiString, FileName); RtlAnsiStringToUnicodeString(&UnicodeString, &AnsiString, TRUE); - KdbpSymAddCachedFile(&UnicodeString, ModuleObject->TextSection->RosSymInfo); + KdbpSymAddCachedFile(&UnicodeString, ModuleObject->RosSymInfo); RtlFreeUnicodeString(&UnicodeString);
DPRINT("Installed symbols: %s@%08x-%08x %p\n", FileName, - ModuleObject->Base, - ModuleObject->Length + ModuleObject->Base, - ModuleObject->TextSection->RosSymInfo); + ModuleObject->DllBase, + ModuleObject->SizeOfImage + ModuleObject->DllBase, + ModuleObject->RosSymInfo); } } }
/*! \brief Initializes the KDB symbols implementation. * - * \param NtoskrnlTextSection MODULE_TEXT_SECTION of ntoskrnl.exe - * \param LdrHalTextSection MODULE_TEXT_SECTION of hal.sys + * \param NtoskrnlModuleObject LDR_DATA_TABLE_ENTRY of ntoskrnl.exe + * \param LdrHalModuleObject LDR_DATA_TABLE_ENTRY of hal.sys */ VOID -KdbSymInit(IN PMODULE_TEXT_SECTION NtoskrnlTextSection, - IN PMODULE_TEXT_SECTION LdrHalTextSection) +KdbSymInit(IN PLDR_DATA_TABLE_ENTRY NtoskrnlModuleObject, + IN PLDR_DATA_TABLE_ENTRY LdrHalModuleObject) { PCHAR p1, p2; int Found; char YesNo;
- NtoskrnlTextSection->RosSymInfo = NULL; - LdrHalTextSection->RosSymInfo = NULL; + NtoskrnlModuleObject->RosSymInfo = NULL; + LdrHalModuleObject->RosSymInfo = NULL;
InitializeListHead(&SymbolFileListHead); KeInitializeSpinLock(&SymbolFileListLock); _____
Modified: trunk/reactos/ntoskrnl/ke/bug.c --- trunk/reactos/ntoskrnl/ke/bug.c 2005-07-30 13:49:41 UTC (rev 16893) +++ trunk/reactos/ntoskrnl/ke/bug.c 2005-07-30 16:25:35 UTC (rev 16894) @@ -297,8 +297,8 @@
BOOLEAN GotExtendedCrashInfo = FALSE; PVOID Address = 0; PLIST_ENTRY CurrentEntry; - MODULE_TEXT_SECTION* CurrentSection = NULL; - extern LIST_ENTRY ModuleTextListHead; + PLDR_DATA_TABLE_ENTRY CurrentModule = NULL; + extern LIST_ENTRY ModuleListHead; #if 0 CHAR PrintString[100]; #endif @@ -321,17 +321,17 @@ Address = (PVOID)Tf->Eip;
/* Try to get information on the module */ - CurrentEntry = ModuleTextListHead.Flink; - while (CurrentEntry != &ModuleTextListHead && CurrentEntry) + CurrentEntry = ModuleListHead.Flink; + while (CurrentEntry != &ModuleListHead) { /* Get the current Section */ - CurrentSection = CONTAINING_RECORD(CurrentEntry, - MODULE_TEXT_SECTION, - ListEntry); + CurrentModule = CONTAINING_RECORD(CurrentEntry, + LDR_DATA_TABLE_ENTRY, + InLoadOrderModuleList);
/* Check if this is the right one */ - if ((Address != NULL && (Address >= (PVOID)CurrentSection->Base && - Address < (PVOID)(CurrentSection->Base + CurrentSection->Length)))) + if ((Address != NULL && (Address >= (PVOID)CurrentModule->DllBase && + Address < (PVOID)((ULONG_PTR)CurrentModule->DllBase + CurrentModule->SizeOfImage)))) { /* We got it */ GotExtendedCrashInfo = TRUE; @@ -366,12 +366,12 @@ { #if 0 sprintf(PrintString, - "The problem seems to be caused by the following file: %S\n\n", - CurrentSection->Name); + "The problem seems to be caused by the following file: %wZ\n\n", + &CurrentModule->BaseDllName); InbvDisplayString(PrintString); #else - DbgPrint("The problem seems to be caused by the following file: %S\n\n", - CurrentSection->Name); + DbgPrint("The problem seems to be caused by the following file: %wZ\n\n", + &CurrentModule->BaseDllName); #endif }
@@ -401,17 +401,17 @@ { #if 0 sprintf(PrintString, - "*** %S - Address 0x%p base at 0x%p, DateStamp 0x%x\n\n", - CurrentSection->Name, + "*** %wZ - Address 0x%p base at 0x%p, DateStamp 0x%x\n\n", + &CurrentModule->BaseDllName, Address, - (PVOID)CurrentSection->Base, + (PVOID)CurrentModule->DllBase, 0); InbvDisplayString(PrintString); #else - DbgPrint("*** %S - Address 0x%p base at 0x%p, DateStamp 0x%x\n\n", - CurrentSection->Name, + DbgPrint("*** %wZ - Address 0x%p base at 0x%p, DateStamp 0x%x\n\n", + &CurrentModule->BaseDllName, Address, - (PVOID)CurrentSection->Base, + (PVOID)CurrentModule->DllBase, 0); #endif } _____
Modified: trunk/reactos/ntoskrnl/ke/i386/exp.c --- trunk/reactos/ntoskrnl/ke/i386/exp.c 2005-07-30 13:49:41 UTC (rev 16893) +++ trunk/reactos/ntoskrnl/ke/i386/exp.c 2005-07-30 16:25:35 UTC (rev 16894) @@ -110,26 +110,25 @@
KiRosPrintAddress(PVOID address) { PLIST_ENTRY current_entry; - MODULE_TEXT_SECTION* current; - extern LIST_ENTRY ModuleTextListHead; + PLDR_DATA_TABLE_ENTRY current; + extern LIST_ENTRY ModuleListHead; ULONG_PTR RelativeAddress; ULONG i = 0;
do { - current_entry = ModuleTextListHead.Flink; + current_entry = ModuleListHead.Flink;
- while (current_entry != &ModuleTextListHead && - current_entry != NULL) + while (current_entry != &ModuleListHead) { current = - CONTAINING_RECORD(current_entry, MODULE_TEXT_SECTION, ListEntry); + CONTAINING_RECORD(current_entry, LDR_DATA_TABLE_ENTRY, InLoadOrderModuleList);
- if (address >= (PVOID)current->Base && - address < (PVOID)(current->Base + current->Length)) + if (address >= (PVOID)current->DllBase && + address < (PVOID)((ULONG_PTR)current->DllBase + current->SizeOfImage)) { - RelativeAddress = (ULONG_PTR) address - current->Base; - DbgPrint("<%ws: %x>", current->Name, RelativeAddress); + RelativeAddress = (ULONG_PTR) address - (ULONG_PTR) current->DllBase; + DbgPrint("<%wZ: %x>", ¤t->FullDllName, RelativeAddress); return(TRUE); } current_entry = current_entry->Flink; _____
Modified: trunk/reactos/ntoskrnl/ldr/loader.c --- trunk/reactos/ntoskrnl/ldr/loader.c 2005-07-30 13:49:41 UTC (rev 16893) +++ trunk/reactos/ntoskrnl/ldr/loader.c 2005-07-30 16:25:35 UTC (rev 16894) @@ -38,12 +38,9 @@
LIST_ENTRY ModuleListHead; KSPIN_LOCK ModuleListLock; -MODULE_OBJECT NtoskrnlModuleObject; -MODULE_OBJECT HalModuleObject; +LDR_DATA_TABLE_ENTRY NtoskrnlModuleObject; +LDR_DATA_TABLE_ENTRY HalModuleObject;
-LIST_ENTRY ModuleTextListHead; -STATIC MODULE_TEXT_SECTION NtoskrnlTextSection; -STATIC MODULE_TEXT_SECTION LdrHalTextSection; ULONG_PTR LdrHalBase;
/* FORWARD DECLARATIONS ******************************************************/ @@ -52,7 +49,7 @@ LdrProcessModule ( PVOID ModuleLoadBase, PUNICODE_STRING ModuleName, - PMODULE_OBJECT *ModuleObject ); + PLDR_DATA_TABLE_ENTRY *ModuleObject );
static VOID LdrpBuildModuleBaseName ( @@ -70,7 +67,7 @@ LdrPEProcessModule ( PVOID ModuleLoadBase, PUNICODE_STRING FileName, - PMODULE_OBJECT *ModuleObject ); + PLDR_DATA_TABLE_ENTRY *ModuleObject );
static PVOID LdrPEGetExportByName ( @@ -87,72 +84,20 @@ ULONG DriverSize );
static NTSTATUS -LdrPEFixupImports ( PMODULE_OBJECT Module ); +LdrPEFixupImports ( PLDR_DATA_TABLE_ENTRY Module );
/* FUNCTIONS *****************************************************************/
VOID LdrInitDebug ( PLOADER_MODULE Module, PWCH Name ) { - PLIST_ENTRY current_entry; - MODULE_TEXT_SECTION* current; - - current_entry = ModuleTextListHead.Flink; - while (current_entry != &ModuleTextListHead) - { - current = - CONTAINING_RECORD(current_entry, MODULE_TEXT_SECTION, ListEntry); - if (wcscmp(current->Name, Name) == 0) - { - break; - } - current_entry = current_entry->Flink; - } - - if (current_entry == &ModuleTextListHead) - { - return; - } }
VOID INIT_FUNCTION LdrInit1 ( VOID ) { - PIMAGE_NT_HEADERS NtHeader; - PIMAGE_SECTION_HEADER SectionList; - - InitializeListHead(&ModuleTextListHead); - - /* Setup ntoskrnl.exe text section */ - /* - * This isn't the base of the text segment, but the start of the - * full image (in memory) - * Also, the Length field isn't set to the length of the segment, - * but is more like the offset, from the image base, to the end - * of the segment. - */ - NtHeader = RtlImageNtHeader((PVOID)KERNEL_BASE); - SectionList = IMAGE_FIRST_SECTION(NtHeader); - NtoskrnlTextSection.Base = KERNEL_BASE; - NtoskrnlTextSection.Length = SectionList[0].Misc.VirtualSize - + SectionList[0].VirtualAddress; - NtoskrnlTextSection.Name = KERNEL_MODULE_NAME; - NtoskrnlTextSection.OptionalHeader = OPTHDROFFSET(KERNEL_BASE); - InsertTailList(&ModuleTextListHead, &NtoskrnlTextSection.ListEntry); - - /* Setup hal.dll text section */ - /* Same comment as above applies */ - NtHeader = RtlImageNtHeader((PVOID)LdrHalBase); - SectionList = IMAGE_FIRST_SECTION(NtHeader); - LdrHalTextSection.Base = LdrHalBase; - LdrHalTextSection.Length = SectionList[0].Misc.VirtualSize - + SectionList[0].VirtualAddress; - LdrHalTextSection.Name = HAL_MODULE_NAME; - LdrHalTextSection.OptionalHeader = OPTHDROFFSET(LdrHalBase); - InsertTailList(&ModuleTextListHead, &LdrHalTextSection.ListEntry); - /* Hook for KDB on initialization of the loader. */ - KDB_LOADERINIT_HOOK(&NtoskrnlTextSection, &LdrHalTextSection); + KDB_LOADERINIT_HOOK(&NtoskrnlModuleObject, &HalModuleObject); }
VOID INIT_FUNCTION @@ -165,43 +110,31 @@ KeInitializeSpinLock(&ModuleListLock);
/* Initialize ModuleObject for NTOSKRNL */ - RtlZeroMemory(&NtoskrnlModuleObject, sizeof(MODULE_OBJECT)); - NtoskrnlModuleObject.Base = (PVOID) KERNEL_BASE; - NtoskrnlModuleObject.Flags = MODULE_FLAG_PE; - RtlInitUnicodeString(&NtoskrnlModuleObject.FullName, KERNEL_MODULE_NAME); - LdrpBuildModuleBaseName(&NtoskrnlModuleObject.BaseName, &NtoskrnlModuleObject.FullName); + RtlZeroMemory(&NtoskrnlModuleObject, sizeof(LDR_DATA_TABLE_ENTRY)); + NtoskrnlModuleObject.DllBase = (PVOID) KERNEL_BASE; + RtlInitUnicodeString(&NtoskrnlModuleObject.FullDllName, KERNEL_MODULE_NAME); + LdrpBuildModuleBaseName(&NtoskrnlModuleObject.BaseDllName, &NtoskrnlModuleObject.FullDllName);
NtHeader = RtlImageNtHeader((PVOID)KERNEL_BASE); - NtoskrnlModuleObject.Image.PE.FileHeader = &NtHeader->FileHeader; - NtoskrnlModuleObject.Image.PE.OptionalHeader = &NtHeader->OptionalHeader; - NtoskrnlModuleObject.Image.PE.SectionList = IMAGE_FIRST_SECTION(NtHeader); - NtoskrnlModuleObject.EntryPoint = (PVOID) ((ULONG_PTR) NtoskrnlModuleObject.Base + NtHeader->OptionalHeader.AddressOfEntryPoint); + NtoskrnlModuleObject.EntryPoint = (PVOID) ((ULONG_PTR) NtoskrnlModuleObject.DllBase + NtHeader->OptionalHeader.AddressOfEntryPoint); DPRINT("ModuleObject:%08x entrypoint at %x\n", &NtoskrnlModuleObject, NtoskrnlModuleObject.EntryPoint); - NtoskrnlModuleObject.Length = NtoskrnlModuleObject.Image.PE.OptionalHeader->SizeOfImage; - NtoskrnlModuleObject.TextSection = &NtoskrnlTextSection; + NtoskrnlModuleObject.SizeOfImage = NtHeader->OptionalHeader.SizeOfImage;
- InsertTailList(&ModuleListHead, - &NtoskrnlModuleObject.ListEntry); + InsertTailList(&ModuleListHead, &NtoskrnlModuleObject.InLoadOrderModuleList);
/* Initialize ModuleObject for HAL */ - RtlZeroMemory(&HalModuleObject, sizeof(MODULE_OBJECT)); - HalModuleObject.Base = (PVOID) LdrHalBase; - HalModuleObject.Flags = MODULE_FLAG_PE; + RtlZeroMemory(&HalModuleObject, sizeof(LDR_DATA_TABLE_ENTRY)); + HalModuleObject.DllBase = (PVOID) LdrHalBase;
- RtlInitUnicodeString(&HalModuleObject.FullName, HAL_MODULE_NAME); - LdrpBuildModuleBaseName(&HalModuleObject.BaseName, &HalModuleObject.FullName); + RtlInitUnicodeString(&HalModuleObject.FullDllName, HAL_MODULE_NAME); + LdrpBuildModuleBaseName(&HalModuleObject.BaseDllName, &HalModuleObject.FullDllName);
NtHeader = RtlImageNtHeader((PVOID)LdrHalBase); - HalModuleObject.Image.PE.FileHeader = &NtHeader->FileHeader; - HalModuleObject.Image.PE.OptionalHeader = &NtHeader->OptionalHeader; - HalModuleObject.Image.PE.SectionList = IMAGE_FIRST_SECTION(NtHeader); - HalModuleObject.EntryPoint = (PVOID) ((ULONG_PTR) HalModuleObject.Base + NtHeader->OptionalHeader.AddressOfEntryPoint); + HalModuleObject.EntryPoint = (PVOID) ((ULONG_PTR) HalModuleObject.DllBase + NtHeader->OptionalHeader.AddressOfEntryPoint); DPRINT("ModuleObject:%08x entrypoint at %x\n", &HalModuleObject, HalModuleObject.EntryPoint); - HalModuleObject.Length = HalModuleObject.Image.PE.OptionalHeader->SizeOfImage; - HalModuleObject.TextSection = &LdrHalTextSection; + HalModuleObject.SizeOfImage = NtHeader->OptionalHeader.SizeOfImage;
- InsertTailList(&ModuleListHead, - &HalModuleObject.ListEntry); + InsertTailList(&ModuleListHead, &HalModuleObject.InLoadOrderModuleList); }
NTSTATUS @@ -212,7 +145,7 @@ PVOID *EntryPoint, PVOID *ExportSectionPointer ) { - PMODULE_OBJECT ModuleObject; + PLDR_DATA_TABLE_ENTRY ModuleObject; NTSTATUS Status;
ModuleObject = LdrGetModuleObject(DriverName); @@ -226,7 +159,7 @@ }
if (ModuleBase) - *ModuleBase = ModuleObject->Base; + *ModuleBase = ModuleObject->DllBase;
//if (SectionPointer) // *SectionPointer = ModuleObject-> @@ -252,7 +185,8 @@ LdrpLoadAndCallImage ( PUNICODE_STRING ModuleName ) { PDRIVER_INITIALIZE DriverEntry; - PMODULE_OBJECT ModuleObject; + PLDR_DATA_TABLE_ENTRY ModuleObject; + DRIVER_OBJECT DriverObject; NTSTATUS Status;
ModuleObject = LdrGetModuleObject(ModuleName); @@ -269,7 +203,10 @@
DriverEntry = (PDRIVER_INITIALIZE)ModuleObject->EntryPoint;
- Status = DriverEntry(NULL, NULL); + RtlZeroMemory(&DriverObject, sizeof(DriverObject)); + DriverObject.DriverStart = ModuleObject->DllBase; + + Status = DriverEntry(&DriverObject, NULL); if (!NT_SUCCESS(Status)) { LdrUnloadModule(ModuleObject); @@ -282,13 +219,13 @@ NTSTATUS LdrLoadModule( PUNICODE_STRING Filename, - PMODULE_OBJECT *ModuleObject ) + PLDR_DATA_TABLE_ENTRY *ModuleObject ) { PVOID ModuleLoadBase; NTSTATUS Status; HANDLE FileHandle; OBJECT_ATTRIBUTES ObjectAttributes; - PMODULE_OBJECT Module; + PLDR_DATA_TABLE_ENTRY Module; FILE_STANDARD_INFORMATION FileStdInfo; IO_STATUS_BLOCK IoStatusBlock;
@@ -384,31 +321,22 @@
NTSTATUS -LdrUnloadModule ( PMODULE_OBJECT ModuleObject ) +LdrUnloadModule ( PLDR_DATA_TABLE_ENTRY ModuleObject ) { KIRQL Irql;
/* Remove the module from the module list */ KeAcquireSpinLock(&ModuleListLock,&Irql); - RemoveEntryList(&ModuleObject->ListEntry); + RemoveEntryList(&ModuleObject->InLoadOrderModuleList); KeReleaseSpinLock(&ModuleListLock, Irql);
/* Hook for KDB on unloading a driver. */ KDB_UNLOADDRIVER_HOOK(ModuleObject);
- /* Free text section */ - if (ModuleObject->TextSection != NULL) - { - ExFreePool(ModuleObject->TextSection->Name); - RemoveEntryList(&ModuleObject->TextSection->ListEntry); - ExFreePool(ModuleObject->TextSection); - ModuleObject->TextSection = NULL; - } - /* Free module section */ - // MmFreeSection(ModuleObject->Base); + // MmFreeSection(ModuleObject->DllBase);
- ExFreePool(ModuleObject->FullName.Buffer); + ExFreePool(ModuleObject->FullDllName.Buffer); ExFreePool(ModuleObject);
return(STATUS_SUCCESS); @@ -419,7 +347,7 @@ LdrProcessModule( PVOID ModuleLoadBase, PUNICODE_STRING ModuleName, - PMODULE_OBJECT *ModuleObject ) + PLDR_DATA_TABLE_ENTRY *ModuleObject ) { PIMAGE_DOS_HEADER PEDosHeader;
@@ -443,7 +371,7 @@ PULONG ReqSize ) { PLIST_ENTRY current_entry; - PMODULE_OBJECT current; + PLDR_DATA_TABLE_ENTRY current; ULONG ModuleCount = 0; PSYSTEM_MODULE_INFORMATION Smi; ANSI_STRING AnsiName; @@ -479,12 +407,12 @@ current_entry = ModuleListHead.Flink; while (current_entry != (&ModuleListHead)) { - current = CONTAINING_RECORD(current_entry,MODULE_OBJECT,ListEntry); + current = CONTAINING_RECORD(current_entry,LDR_DATA_TABLE_ENTRY,InLoadOrderModuleLi st);
Smi->Module[ModuleCount].Unknown1 = 0; /* Always 0 */ Smi->Module[ModuleCount].Unknown2 = 0; /* Always 0 */ - Smi->Module[ModuleCount].Base = current->Base; - Smi->Module[ModuleCount].Size = current->Length; + Smi->Module[ModuleCount].Base = current->DllBase; + Smi->Module[ModuleCount].Size = current->SizeOfImage; Smi->Module[ModuleCount].Flags = 0; /* Flags ??? (GN) */ Smi->Module[ModuleCount].Index = (USHORT)ModuleCount; Smi->Module[ModuleCount].NameLength = 0; @@ -494,7 +422,7 @@ AnsiName.MaximumLength = 256; AnsiName.Buffer = Smi->Module[ModuleCount].ImageName; RtlUnicodeStringToAnsiString(&AnsiName, - ¤t->FullName, + ¤t->FullDllName, FALSE);
p = strrchr(AnsiName.Buffer, '\'); @@ -613,10 +541,10 @@ return(0); }
-PMODULE_OBJECT +PLDR_DATA_TABLE_ENTRY LdrGetModuleObject ( PUNICODE_STRING ModuleName ) { - PMODULE_OBJECT Module; + PLDR_DATA_TABLE_ENTRY Module; PLIST_ENTRY Entry; KIRQL Irql;
@@ -627,15 +555,15 @@ Entry = ModuleListHead.Flink; while (Entry != &ModuleListHead) { - Module = CONTAINING_RECORD(Entry, MODULE_OBJECT, ListEntry); + Module = CONTAINING_RECORD(Entry, LDR_DATA_TABLE_ENTRY, InLoadOrderModuleList);
DPRINT("Comparing %wZ and %wZ\n", &Module->BaseName, ModuleName);
- if (!LdrpCompareModuleNames(&Module->BaseName, ModuleName)) + if (!LdrpCompareModuleNames(&Module->BaseDllName, ModuleName)) { - DPRINT("Module %wZ\n", &Module->BaseName); + DPRINT("Module %wZ\n", &Module->BaseDllName); KeReleaseSpinLock(&ModuleListLock, Irql); return(Module); } @@ -710,7 +638,7 @@ LdrPEProcessModule( PVOID ModuleLoadBase, PUNICODE_STRING FileName, - PMODULE_OBJECT *ModuleObject ) + PLDR_DATA_TABLE_ENTRY *ModuleObject ) { unsigned int DriverSize, Idx; DWORD CurrentSize; @@ -718,8 +646,7 @@ PIMAGE_DOS_HEADER PEDosHeader; PIMAGE_NT_HEADERS PENtHeaders; PIMAGE_SECTION_HEADER PESectionHeaders; - PMODULE_OBJECT CreatedModuleObject; - MODULE_TEXT_SECTION* ModuleTextSection; + PLDR_DATA_TABLE_ENTRY CreatedModuleObject; NTSTATUS Status; KIRQL Irql;
@@ -817,59 +744,45 @@
/* Create the module */ CreatedModuleObject = ExAllocatePoolWithTag ( - NonPagedPool, sizeof(MODULE_OBJECT), TAG_MODULE_OBJECT ); + NonPagedPool, sizeof(LDR_DATA_TABLE_ENTRY), TAG_MODULE_OBJECT ); if (CreatedModuleObject == NULL) { // MmFreeSection(DriverBase); return STATUS_INSUFFICIENT_RESOURCES; }
- RtlZeroMemory(CreatedModuleObject, sizeof(MODULE_OBJECT)); + RtlZeroMemory(CreatedModuleObject, sizeof(LDR_DATA_TABLE_ENTRY));
/* Initialize ModuleObject data */ - CreatedModuleObject->Base = DriverBase; - CreatedModuleObject->Flags = MODULE_FLAG_PE; + CreatedModuleObject->DllBase = DriverBase;
- CreatedModuleObject->FullName.Length = 0; - CreatedModuleObject->FullName.MaximumLength = FileName->Length + sizeof(UNICODE_NULL); - CreatedModuleObject->FullName.Buffer = - ExAllocatePoolWithTag(PagedPool, CreatedModuleObject->FullName.MaximumLength, TAG_LDR_WSTR); - if (CreatedModuleObject->FullName.Buffer == NULL) + CreatedModuleObject->FullDllName.Length = 0; + CreatedModuleObject->FullDllName.MaximumLength = FileName->Length + sizeof(UNICODE_NULL); + CreatedModuleObject->FullDllName.Buffer = + ExAllocatePoolWithTag(PagedPool, CreatedModuleObject->FullDllName.MaximumLength, TAG_LDR_WSTR); + if (CreatedModuleObject->FullDllName.Buffer == NULL) { ExFreePool(CreatedModuleObject); // MmFreeSection(DriverBase); return STATUS_INSUFFICIENT_RESOURCES; }
[truncated at 1000 lines; 281 more skipped]