From 93ad123f94e0ac232481f3f5882fd1a2121e930e Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Mon, 23 Sep 2024 15:06:35 +0300 Subject: [PATCH] [NTDLL] Halfplement LdrpValidateImageForMp This avoids debug spam. --- dll/ntdll/ldr/ldrinit.c | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/dll/ntdll/ldr/ldrinit.c b/dll/ntdll/ldr/ldrinit.c index 991f498dba252..efe3a9ec6085d 100644 --- a/dll/ntdll/ldr/ldrinit.c +++ b/dll/ntdll/ldr/ldrinit.c @@ -1538,7 +1538,36 @@ VOID NTAPI LdrpValidateImageForMp(IN PLDR_DATA_TABLE_ENTRY LdrDataTableEntry) { - UNIMPLEMENTED; + PIMAGE_NT_HEADERS NtHeaders; + NTSTATUS Status; + + /* Get the NT Headers */ + NtHeaders = RtlImageNtHeader(LdrDataTableEntry->DllBase); + if (NtHeaders == NULL) + { + RtlRaiseStatus(STATUS_INVALID_IMAGE_FORMAT); + } + + /* Check if the image is UP only */ + if (NtHeaders->FileHeader.Characteristics & IMAGE_FILE_UP_SYSTEM_ONLY) + { + /* Set process affinity to 1 */ + DPRINT1("LDR: Image is UP only, setting process affinity to 1\n"); + KAFFINITY AffinityMask = 1; + Status = NtSetInformationProcess(NtCurrentProcess(), + ProcessAffinityMask, + &AffinityMask, + sizeof(AffinityMask)); + if (!NT_SUCCESS(Status)) + { + RtlRaiseStatus(Status); + } + + /* Save it in the PEB */ + NtCurrentPeb()->NumberOfProcessors = 1; + } + + // FIXME: Anything else to do? } BOOLEAN