mirror of
https://github.com/reactos/reactos.git
synced 2025-05-31 06:58:10 +00:00
- Rename LdrLoadModule to MmLoadSystemImage and change prototype. No code change except update callers and return ImageBaseAddress parameter when requested.
svn path=/trunk/; revision=25875
This commit is contained in:
parent
31446c8a3b
commit
f141767094
5 changed files with 38 additions and 21 deletions
|
@ -1267,7 +1267,6 @@ SSI_DEF(SystemLoadGdiDriverInformation)
|
||||||
PVOID ImageBase;
|
PVOID ImageBase;
|
||||||
ULONG_PTR EntryPoint;
|
ULONG_PTR EntryPoint;
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
PLDR_DATA_TABLE_ENTRY ModuleObject;
|
|
||||||
ULONG DirSize;
|
ULONG DirSize;
|
||||||
PIMAGE_NT_HEADERS NtHeader;
|
PIMAGE_NT_HEADERS NtHeader;
|
||||||
|
|
||||||
|
@ -1283,11 +1282,15 @@ SSI_DEF(SystemLoadGdiDriverInformation)
|
||||||
|
|
||||||
/* Load the driver */
|
/* Load the driver */
|
||||||
ImageName = DriverInfo->DriverName;
|
ImageName = DriverInfo->DriverName;
|
||||||
Status = LdrLoadModule(&ImageName, &ModuleObject);
|
Status = MmLoadSystemImage(&ImageName,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
0,
|
||||||
|
NULL,
|
||||||
|
&ImageBase);
|
||||||
if (!NT_SUCCESS(Status)) return Status;
|
if (!NT_SUCCESS(Status)) return Status;
|
||||||
|
|
||||||
/* Return the export pointer */
|
/* Return the export pointer */
|
||||||
ImageBase = ModuleObject->DllBase;
|
|
||||||
DriverInfo->ExportSectionPointer =
|
DriverInfo->ExportSectionPointer =
|
||||||
RtlImageDirectoryEntryToData(ImageBase,
|
RtlImageDirectoryEntryToData(ImageBase,
|
||||||
TRUE,
|
TRUE,
|
||||||
|
@ -1479,11 +1482,15 @@ SSI_DEF(SystemExtendServiceTableInformation)
|
||||||
ImageName = *(PUNICODE_STRING)Buffer;
|
ImageName = *(PUNICODE_STRING)Buffer;
|
||||||
|
|
||||||
/* Load the image */
|
/* Load the image */
|
||||||
Status = LdrLoadModule(&ImageName, &ModuleObject);
|
Status = MmLoadSystemImage(&ImageName,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
0,
|
||||||
|
(PVOID)&ModuleObject,
|
||||||
|
&ImageBase);
|
||||||
if (!NT_SUCCESS(Status)) return Status;
|
if (!NT_SUCCESS(Status)) return Status;
|
||||||
|
|
||||||
/* Get the headers */
|
/* Get the headers */
|
||||||
ImageBase = ModuleObject->DllBase;
|
|
||||||
NtHeader = RtlImageNtHeader(ImageBase);
|
NtHeader = RtlImageNtHeader(ImageBase);
|
||||||
if (!NtHeader)
|
if (!NtHeader)
|
||||||
{
|
{
|
||||||
|
|
|
@ -66,10 +66,12 @@ LdrInitDebug(
|
||||||
|
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
NTAPI
|
NTAPI
|
||||||
LdrLoadModule(
|
MmLoadSystemImage(IN PUNICODE_STRING FileName,
|
||||||
PUNICODE_STRING Filename,
|
IN PUNICODE_STRING NamePrefix OPTIONAL,
|
||||||
PLDR_DATA_TABLE_ENTRY *ModuleObject
|
IN PUNICODE_STRING LoadedName OPTIONAL,
|
||||||
);
|
IN ULONG Flags,
|
||||||
|
OUT PVOID *ModuleObject,
|
||||||
|
OUT PVOID *ImageBaseAddress);
|
||||||
|
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
NTAPI
|
NTAPI
|
||||||
|
|
|
@ -455,7 +455,7 @@ IopLoadServiceModule(
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
DPRINT("Loading module\n");
|
DPRINT("Loading module\n");
|
||||||
Status = LdrLoadModule(&ServiceImagePath, ModuleObject);
|
Status = MmLoadSystemImage(&ServiceImagePath, NULL, NULL, 0, (PVOID)ModuleObject, NULL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -1721,11 +1721,10 @@ NtLoadDriver(IN PUNICODE_STRING DriverServiceName)
|
||||||
* Load the driver module
|
* Load the driver module
|
||||||
*/
|
*/
|
||||||
|
|
||||||
Status = LdrLoadModule(&ImagePath, &ModuleObject);
|
Status = MmLoadSystemImage(&ImagePath, NULL, NULL, 0, (PVOID)&ModuleObject, NULL);
|
||||||
|
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
DPRINT("LdrLoadModule() failed (Status %lx)\n", Status);
|
DPRINT("MmLoadSystemImage() failed (Status %lx)\n", Status);
|
||||||
IopFreeDeviceNode(DeviceNode);
|
IopFreeDeviceNode(DeviceNode);
|
||||||
goto ReleaseCapturedString;
|
goto ReleaseCapturedString;
|
||||||
}
|
}
|
||||||
|
|
|
@ -173,9 +173,12 @@ LdrUnloadModule ( PLDR_DATA_TABLE_ENTRY ModuleObject )
|
||||||
//
|
//
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
NTAPI
|
NTAPI
|
||||||
LdrLoadModule(
|
MmLoadSystemImage(IN PUNICODE_STRING FileName,
|
||||||
PUNICODE_STRING FileName,
|
IN PUNICODE_STRING NamePrefix OPTIONAL,
|
||||||
PLDR_DATA_TABLE_ENTRY *ModuleObject )
|
IN PUNICODE_STRING LoadedName OPTIONAL,
|
||||||
|
IN ULONG Flags,
|
||||||
|
OUT PVOID *ModuleObject,
|
||||||
|
OUT PVOID *ImageBaseAddress)
|
||||||
{
|
{
|
||||||
PVOID ModuleLoadBase;
|
PVOID ModuleLoadBase;
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
|
@ -199,7 +202,8 @@ LdrLoadModule(
|
||||||
PCHAR MissingApiName, Buffer;
|
PCHAR MissingApiName, Buffer;
|
||||||
PWCHAR MissingDriverName;
|
PWCHAR MissingDriverName;
|
||||||
|
|
||||||
*ModuleObject = NULL;
|
if (ModuleObject) *ModuleObject = NULL;
|
||||||
|
if (ImageBaseAddress) *ImageBaseAddress = NULL;
|
||||||
|
|
||||||
DPRINT("Loading Module %wZ...\n", FileName);
|
DPRINT("Loading Module %wZ...\n", FileName);
|
||||||
|
|
||||||
|
@ -507,7 +511,8 @@ LdrLoadModule(
|
||||||
/* Cleanup */
|
/* Cleanup */
|
||||||
ExFreePool(ModuleLoadBase);
|
ExFreePool(ModuleLoadBase);
|
||||||
|
|
||||||
*ModuleObject = Module;
|
if (ModuleObject) *ModuleObject = Module;
|
||||||
|
if (ImageBaseAddress) *ImageBaseAddress = Module->DllBase;
|
||||||
|
|
||||||
/* Hook for KDB on loading a driver. */
|
/* Hook for KDB on loading a driver. */
|
||||||
KDB_LOADDRIVER_HOOK(FileName, Module);
|
KDB_LOADDRIVER_HOOK(FileName, Module);
|
||||||
|
|
|
@ -484,7 +484,12 @@ CheckDllState:
|
||||||
DllName.Buffer[(DllName.MaximumLength - 1) / 2] = UNICODE_NULL;
|
DllName.Buffer[(DllName.MaximumLength - 1) / 2] = UNICODE_NULL;
|
||||||
|
|
||||||
/* Load the image */
|
/* Load the image */
|
||||||
Status = LdrLoadModule(&DllName, &DllEntry);
|
Status = MmLoadSystemImage(&DllName,
|
||||||
|
NamePrefix,
|
||||||
|
NULL,
|
||||||
|
0,
|
||||||
|
(PVOID)&DllEntry,
|
||||||
|
&DllBase);
|
||||||
if (NT_SUCCESS(Status))
|
if (NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
/* We can free the DLL Name */
|
/* We can free the DLL Name */
|
||||||
|
@ -511,8 +516,7 @@ CheckDllState:
|
||||||
/* We're now loaded */
|
/* We're now loaded */
|
||||||
Loaded = TRUE;
|
Loaded = TRUE;
|
||||||
|
|
||||||
/* Get the base address and other information */
|
/* Sanity check */
|
||||||
DllBase = DllEntry->DllBase;
|
|
||||||
ASSERT(DllBase = DllEntry->DllBase);
|
ASSERT(DllBase = DllEntry->DllBase);
|
||||||
|
|
||||||
/* Call the initialization routines */
|
/* Call the initialization routines */
|
||||||
|
|
Loading…
Reference in a new issue