Use W32API/PSDK structures/constants. The whole /ldr code is in MAJOR
need of re-writing. Amazing it even works.
Modified: trunk/reactos/include/pe.h
Modified: trunk/reactos/ntoskrnl/ldr/loader.c
_____
Modified: trunk/reactos/include/pe.h
--- trunk/reactos/include/pe.h 2005-01-01 20:44:34 UTC (rev 12708)
+++ trunk/reactos/include/pe.h 2005-01-01 22:10:23 UTC (rev 12709)
@@ -379,10 +379,10 @@
} u1;
} IMAGE_THUNK_DATA,*PIMAGE_THUNK_DATA;
typedef struct _IMAGE_IMPORT_DESCRIPTOR {
- _ANONYMOUS_UNION union {
+ union {
DWORD Characteristics;
PIMAGE_THUNK_DATA OriginalFirstThunk;
- } DUMMYUNIONNAME;
+ } ;
DWORD TimeDateStamp;
DWORD ForwarderChain;
DWORD Name;
@@ -635,6 +635,8 @@
#define IMAGE_SIZEOF_ARCHIVE_MEMBER_HDR 60
#define SIZEOF_RFPO_DATA 16
#define IMAGE_FIRST_SECTION(h) ((PIMAGE_SECTION_HEADER)
((DWORD)h+FIELD_OFFSET(IMAGE_NT_HEADERS,OptionalHeader)+((PIMAGE_NT_HEAD
ERS)(h))->FileHeader.SizeOfOptionalHeader))
+/* Temporarily adding this here. This file will die soon. */
+#define IMAGE_SCN_TYPE_NOLOAD 0x2L
#define IMAGE_SCN_TYPE_NO_PAD 8
#define IMAGE_SCN_CNT_CODE 32
#define IMAGE_SCN_CNT_INITIALIZED_DATA 64
_____
Modified: trunk/reactos/ntoskrnl/ldr/loader.c
--- trunk/reactos/ntoskrnl/ldr/loader.c 2005-01-01 20:44:34 UTC (rev
12708)
+++ trunk/reactos/ntoskrnl/ldr/loader.c 2005-01-01 22:10:23 UTC (rev
12709)
@@ -428,7 +428,7 @@
/* If MZ header exists */
PEDosHeader = (PIMAGE_DOS_HEADER) ModuleLoadBase;
- if (PEDosHeader->e_magic == IMAGE_DOS_MAGIC && PEDosHeader->e_lfanew
!= 0L)
+ if (PEDosHeader->e_magic == IMAGE_DOS_SIGNATURE &&
PEDosHeader->e_lfanew != 0L)
{
return LdrPEProcessModule(ModuleLoadBase,
ModuleName,
@@ -669,18 +669,18 @@
for (Idx = 0; Idx < PEFileHeader->NumberOfSections && (!Write ||
!Execute); Idx++)
{
Characteristics = PESectionHeaders[Idx].Characteristics;
- if (!(Characteristics & IMAGE_SECTION_NOLOAD))
+ if (!(Characteristics & IMAGE_SCN_TYPE_NOLOAD))
{
Length = max(PESectionHeaders[Idx].Misc.VirtualSize,
PESectionHeaders[Idx].SizeOfRawData);
BaseAddress = PESectionHeaders[Idx].VirtualAddress +
(char*)DriverBase;
if (BaseAddress < (PVOID)((ULONG_PTR)PageStart + PAGE_SIZE) &&
PageStart < (PVOID)((ULONG_PTR)BaseAddress + Length))
{
- if (Characteristics & IMAGE_SECTION_CHAR_CODE)
+ if (Characteristics & IMAGE_SCN_CNT_CODE)
{
Execute = TRUE;
}
- if (Characteristics &
(IMAGE_SECTION_CHAR_WRITABLE|IMAGE_SECTION_CHAR_BSS))
+ if (Characteristics &
(IMAGE_SCN_MEM_WRITE|IMAGE_SCN_LNK_OTHER))
{
Write = TRUE;
}
@@ -730,7 +730,7 @@
CHECKPOINT;
/* Check file magic numbers */
- if (PEDosHeader->e_magic != IMAGE_DOS_MAGIC)
+ if (PEDosHeader->e_magic != IMAGE_DOS_SIGNATURE)
{
CPRINT("Incorrect MZ magic: %04x\n", PEDosHeader->e_magic);
return STATUS_UNSUCCESSFUL;
@@ -740,7 +740,7 @@
CPRINT("Invalid lfanew offset: %08x\n", PEDosHeader->e_lfanew);
return STATUS_UNSUCCESSFUL;
}
- if (PENtHeaders->Signature != IMAGE_PE_MAGIC)
+ if (PENtHeaders->Signature != IMAGE_NT_SIGNATURE)
{
CPRINT("Incorrect PE magic: %08x\n", PENtHeaders->Signature);
return STATUS_UNSUCCESSFUL;
@@ -766,7 +766,7 @@
DriverSize = 0;
for (Idx = 0; Idx < PENtHeaders->FileHeader.NumberOfSections; Idx++)
{
- if (!(PESectionHeaders[Idx].Characteristics &
IMAGE_SECTION_NOLOAD))
+ if (!(PESectionHeaders[Idx].Characteristics &
IMAGE_SCN_TYPE_NOLOAD))
{
CurrentSize = PESectionHeaders[Idx].VirtualAddress +
PESectionHeaders[Idx].Misc.VirtualSize;
DriverSize = max(DriverSize, CurrentSize);
@@ -899,9 +899,9 @@
MmSetPageProtect(NULL, PageAddress, Protect);
}
- if (Characteristics & IMAGE_SECTION_CHAR_CODE)
+ if (Characteristics & IMAGE_SCN_CNT_CODE)
{
- if (Characteristics & IMAGE_SECTION_CHAR_WRITABLE)
+ if (Characteristics & IMAGE_SCN_MEM_WRITE)
{
Protect = PAGE_EXECUTE_READWRITE;
}
@@ -910,7 +910,7 @@
Protect = PAGE_EXECUTE_READ;
}
}
- else if (Characteristics &
(IMAGE_SECTION_CHAR_WRITABLE|IMAGE_SECTION_CHAR_BSS))
+ else if (Characteristics &
(IMAGE_SCN_MEM_WRITE|IMAGE_SCN_LNK_OTHER))
{
Protect = PAGE_READWRITE;
}
@@ -996,7 +996,7 @@
CHECKPOINT;
/* Check file magic numbers */
- if (PEDosHeader->e_magic != IMAGE_DOS_MAGIC)
+ if (PEDosHeader->e_magic != IMAGE_DOS_SIGNATURE)
{
return NULL;
}
@@ -1004,7 +1004,7 @@
{
return NULL;
}
- if (PENtHeaders->Signature != IMAGE_PE_MAGIC)
+ if (PENtHeaders->Signature != IMAGE_NT_SIGNATURE)
{
return NULL;
}
@@ -1090,9 +1090,9 @@
BaseAddress = PESectionHeaders[Idx].VirtualAddress +
(char*)DriverBase;
PageAddress = (PVOID)PAGE_ROUND_DOWN(BaseAddress);
- if (Characteristics & IMAGE_SECTION_CHAR_EXECUTABLE)
+ if (Characteristics & IMAGE_SCN_MEM_EXECUTE)
{
- if (Characteristics & IMAGE_SECTION_CHAR_WRITABLE)
+ if (Characteristics & IMAGE_SCN_MEM_WRITE)
{
Protect = PAGE_EXECUTE_READWRITE;
}
@@ -1101,7 +1101,7 @@
Protect = PAGE_EXECUTE_READ;
}
}
- else if (Characteristics & IMAGE_SECTION_CHAR_WRITABLE)
+ else if (Characteristics & IMAGE_SCN_MEM_WRITE)
{
Protect = PAGE_READWRITE;
}
@@ -1115,7 +1115,7 @@
PageAddress = (PVOID)((ULONG_PTR)PageAddress + PAGE_SIZE);
}
if (DriverBase == ModuleLoadBase &&
- Characteristics & IMAGE_SECTION_CHAR_BSS)
+ Characteristics & IMAGE_SCN_LNK_OTHER)
{
/* For ntoskrnl, we must stop after the bss section */
break;
@@ -1516,28 +1516,28 @@
static NTSTATUS
LdrPEProcessImportDirectoryEntry(PVOID DriverBase,
PMODULE_OBJECT ImportedModule,
- PIMAGE_IMPORT_MODULE_DIRECTORY
ImportModuleDirectory)
+ PIMAGE_IMPORT_DESCRIPTOR
ImportModuleDirectory)
{
PVOID* ImportAddressList;
PULONG FunctionNameList;
ULONG Ordinal;
- if (ImportModuleDirectory == NULL ||
ImportModuleDirectory->dwRVAModuleName == 0)
+ if (ImportModuleDirectory == NULL || ImportModuleDirectory->Name ==
0)
{
return STATUS_UNSUCCESSFUL;
}
/* Get the import address list. */
- ImportAddressList = (PVOID*)(DriverBase +
ImportModuleDirectory->dwRVAFunctionAddressList);
+ ImportAddressList = (PVOID*)(DriverBase +
(ULONG_PTR)ImportModuleDirectory->FirstThunk);
/* Get the list of functions to import. */
- if (ImportModuleDirectory->dwRVAFunctionNameList != 0)
+ if (ImportModuleDirectory->OriginalFirstThunk != 0)
{
- FunctionNameList = (PULONG) (DriverBase +
ImportModuleDirectory->dwRVAFunctionNameList);
+ FunctionNameList = (PULONG) (DriverBase +
(ULONG_PTR)ImportModuleDirectory->OriginalFirstThunk);
}
else
{
- FunctionNameList = (PULONG)(DriverBase +
ImportModuleDirectory->dwRVAFunctionAddressList);
+ FunctionNameList = (PULONG)(DriverBase +
(ULONG_PTR)ImportModuleDirectory->FirstThunk);
}
/* Walk through function list and fixup addresses. */
@@ -1573,22 +1573,22 @@
static NTSTATUS
LdrPEFixupImports(PMODULE_OBJECT Module)
{
- PIMAGE_IMPORT_MODULE_DIRECTORY ImportModuleDirectory;
+ PIMAGE_IMPORT_DESCRIPTOR ImportModuleDirectory;
PCHAR ImportedName;
PMODULE_OBJECT ImportedModule;
NTSTATUS Status;
/* Process each import module */
- ImportModuleDirectory = (PIMAGE_IMPORT_MODULE_DIRECTORY)
+ ImportModuleDirectory = (PIMAGE_IMPORT_DESCRIPTOR)
RtlImageDirectoryEntryToData(Module->Base,
TRUE,
IMAGE_DIRECTORY_ENTRY_IMPORT,
NULL);
DPRINT("Processeing import directory at %p\n",
ImportModuleDirectory);
- while (ImportModuleDirectory->dwRVAModuleName)
+ while (ImportModuleDirectory->Name)
{
/* Check to make sure that import lib is kernel */
- ImportedName = (PCHAR) Module->Base +
ImportModuleDirectory->dwRVAModuleName;
+ ImportedName = (PCHAR) Module->Base +
ImportModuleDirectory->Name;
Status = LdrPEGetOrLoadModule(Module, ImportedName,
&ImportedModule);
if (!NT_SUCCESS(Status))