https://git.reactos.org/?p=reactos.git;a=commitdiff;h=7c23a2e38e9c49828364a7b02c2116fd0964b94e

commit 7c23a2e38e9c49828364a7b02c2116fd0964b94e
Author:     Hermès Bélusca-Maïto <[email protected]>
AuthorDate: Mon Mar 3 20:29:36 2025 +0100
Commit:     Hermès Bélusca-Maïto <[email protected]>
CommitDate: Mon Mar 3 20:30:54 2025 +0100

    [NTOS:MM] Split MmVerifyImageIsOkForMpUse() into an auxiliary inlined 
helper.
    
    This helper is used when an existing NtHeader is already available.
---
 ntoskrnl/mm/ARM3/sysldr.c | 43 ++++++++++++++++++++++++++-----------------
 1 file changed, 26 insertions(+), 17 deletions(-)

diff --git a/ntoskrnl/mm/ARM3/sysldr.c b/ntoskrnl/mm/ARM3/sysldr.c
index 2cdfc365cc7..eb1544babbf 100644
--- a/ntoskrnl/mm/ARM3/sysldr.c
+++ b/ntoskrnl/mm/ARM3/sysldr.c
@@ -2716,30 +2716,39 @@ MiEnablePagingOfDriver(IN PLDR_DATA_TABLE_ENTRY 
LdrEntry)
     if (PointerPte) MiSetPagingOfDriver(PointerPte, LastPte);
 }
 
+FORCEINLINE
 BOOLEAN
-NTAPI
-MmVerifyImageIsOkForMpUse(IN PVOID BaseAddress)
+MiVerifyImageIsOkForMpUse(
+    _In_ PIMAGE_NT_HEADERS NtHeaders)
 {
-    PIMAGE_NT_HEADERS NtHeader;
-    PAGED_CODE();
-
-    /* Get NT Headers */
-    NtHeader = RtlImageNtHeader(BaseAddress);
-    if (NtHeader)
+    /* Fail if we have 2+ CPUs, but the image is only safe for UP */
+    if ((KeNumberProcessors > 1) &&
+        (NtHeaders->FileHeader.Characteristics & IMAGE_FILE_UP_SYSTEM_ONLY))
     {
-        /* Check if this image is only safe for UP while we have 2+ CPUs */
-        if ((KeNumberProcessors > 1) &&
-            (NtHeader->FileHeader.Characteristics & IMAGE_FILE_UP_SYSTEM_ONLY))
-        {
-            /* Fail */
-            return FALSE;
-        }
+        return FALSE;
     }
-
-    /* Otherwise, it's safe */
+    /* Otherwise, it's safe to use */
     return TRUE;
 }
 
+// TODO: Use this function to verify that the loaded boot drivers
+// (in ExpLoadBootSymbols) are compatible with MP.
+BOOLEAN
+NTAPI
+MmVerifyImageIsOkForMpUse(
+    _In_ PVOID BaseAddress)
+{
+    PIMAGE_NT_HEADERS NtHeaders;
+    PAGED_CODE();
+
+    /* Get the NT headers. If none, suppose the image
+     * is safe to use, otherwise invoke the helper. */
+    NtHeaders = RtlImageNtHeader(BaseAddress);
+    if (!NtHeaders)
+        return TRUE;
+    return MiVerifyImageIsOkForMpUse(NtHeaders);
+}
+
 NTSTATUS
 NTAPI
 MmCheckSystemImage(IN HANDLE ImageHandle,

Reply via email to