mirror of
https://github.com/reactos/reactos.git
synced 2025-07-31 13:21:39 +00:00
[NTOS:MM:PS] Little fixes for NTDLL loading (#7707)
- [NTOS:PS] `STATUS_INVALID_IMAGE_PROTECT` returned by `MmCheckSystemImage` should be a fatal error too. - [NTOS:PS] Fix object attributes for opening NTDLL. - [NTOS:MM] Remove `MmCheckSystemImage` unused parameter. - [NTOS:MM] Inline `MmVerifyImageIsOkForMpUse` in `MmCheckSystemImage`, reducing a call to `RtlImageNtHeader`.
This commit is contained in:
parent
7c23a2e38e
commit
4d605ec26f
3 changed files with 11 additions and 11 deletions
|
@ -1652,9 +1652,7 @@ MmUnloadSystemImage(
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
NTAPI
|
NTAPI
|
||||||
MmCheckSystemImage(
|
MmCheckSystemImage(
|
||||||
IN HANDLE ImageHandle,
|
_In_ HANDLE ImageHandle);
|
||||||
IN BOOLEAN PurgeSection
|
|
||||||
);
|
|
||||||
|
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
NTAPI
|
NTAPI
|
||||||
|
|
|
@ -2751,8 +2751,8 @@ MmVerifyImageIsOkForMpUse(
|
||||||
|
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
NTAPI
|
NTAPI
|
||||||
MmCheckSystemImage(IN HANDLE ImageHandle,
|
MmCheckSystemImage(
|
||||||
IN BOOLEAN PurgeSection)
|
_In_ HANDLE ImageHandle)
|
||||||
{
|
{
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
HANDLE SectionHandle;
|
HANDLE SectionHandle;
|
||||||
|
@ -2846,12 +2846,14 @@ MmCheckSystemImage(IN HANDLE ImageHandle,
|
||||||
goto Fail;
|
goto Fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Check that it's a valid SMP image if we have more then one CPU */
|
#ifdef CONFIG_SMP
|
||||||
if (!MmVerifyImageIsOkForMpUse(ViewBase))
|
/* Check that it's a valid SMP image if we have more than one CPU */
|
||||||
|
if (!MiVerifyImageIsOkForMpUse(NtHeaders))
|
||||||
{
|
{
|
||||||
/* Otherwise it's not the right image */
|
/* Otherwise it's not the right image */
|
||||||
Status = STATUS_IMAGE_MP_UP_MISMATCH;
|
Status = STATUS_IMAGE_MP_UP_MISMATCH;
|
||||||
}
|
}
|
||||||
|
#endif // CONFIG_SMP
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Unmap the section, close the handle, and return status */
|
/* Unmap the section, close the handle, and return status */
|
||||||
|
@ -3180,7 +3182,7 @@ LoaderScan:
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Validate it */
|
/* Validate it */
|
||||||
Status = MmCheckSystemImage(FileHandle, FALSE);
|
Status = MmCheckSystemImage(FileHandle);
|
||||||
if ((Status == STATUS_IMAGE_CHECKSUM_MISMATCH) ||
|
if ((Status == STATUS_IMAGE_CHECKSUM_MISMATCH) ||
|
||||||
(Status == STATUS_IMAGE_MP_UP_MISMATCH) ||
|
(Status == STATUS_IMAGE_MP_UP_MISMATCH) ||
|
||||||
(Status == STATUS_INVALID_IMAGE_PROTECT))
|
(Status == STATUS_INVALID_IMAGE_PROTECT))
|
||||||
|
|
|
@ -196,7 +196,7 @@ PsLocateSystemDll(VOID)
|
||||||
/* Locate and open NTDLL to determine ImageBase and LdrStartup */
|
/* Locate and open NTDLL to determine ImageBase and LdrStartup */
|
||||||
InitializeObjectAttributes(&ObjectAttributes,
|
InitializeObjectAttributes(&ObjectAttributes,
|
||||||
&PsNtDllPathName,
|
&PsNtDllPathName,
|
||||||
0,
|
OBJ_CASE_INSENSITIVE | OBJ_KERNEL_HANDLE,
|
||||||
NULL,
|
NULL,
|
||||||
NULL);
|
NULL);
|
||||||
Status = ZwOpenFile(&FileHandle,
|
Status = ZwOpenFile(&FileHandle,
|
||||||
|
@ -212,8 +212,8 @@ PsLocateSystemDll(VOID)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Check if the image is valid */
|
/* Check if the image is valid */
|
||||||
Status = MmCheckSystemImage(FileHandle, TRUE);
|
Status = MmCheckSystemImage(FileHandle);
|
||||||
if (Status == STATUS_IMAGE_CHECKSUM_MISMATCH)
|
if (Status == STATUS_IMAGE_CHECKSUM_MISMATCH || Status == STATUS_INVALID_IMAGE_PROTECT)
|
||||||
{
|
{
|
||||||
/* Raise a hard error */
|
/* Raise a hard error */
|
||||||
HardErrorParameters = (ULONG_PTR)&PsNtDllPathName;
|
HardErrorParameters = (ULONG_PTR)&PsNtDllPathName;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue