From 053bd74aa31d7e182ea3db939124ac4dc0ae6ba7 Mon Sep 17 00:00:00 2001 From: Billy Laws Date: Sun, 17 May 2026 21:21:03 +0100 Subject: [PATCH 1/3] Windows/Common: Add ScopedHandle::reset() --- Source/Windows/Common/Handle.h | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Source/Windows/Common/Handle.h b/Source/Windows/Common/Handle.h index 8424c5692..fd5f11ec0 100644 --- a/Source/Windows/Common/Handle.h +++ b/Source/Windows/Common/Handle.h @@ -20,9 +20,14 @@ public: } ~ScopedHandle() { + reset(INVALID_HANDLE_VALUE); + } + + void reset(HANDLE NewHandle = INVALID_HANDLE_VALUE) { if (Handle != INVALID_HANDLE_VALUE) { NtClose(Handle); } + Handle = NewHandle; } const HANDLE& operator*() const { From 82030b8286ede1131f28d39dfe24d0bbeabb8651 Mon Sep 17 00:00:00 2001 From: Billy Laws Date: Sun, 17 May 2026 21:21:38 +0100 Subject: [PATCH 2/3] Windows: Declare winternl relocation APIs --- Source/Windows/include/winternl.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Source/Windows/include/winternl.h b/Source/Windows/include/winternl.h index 03f3c4497..4218575bc 100644 --- a/Source/Windows/include/winternl.h +++ b/Source/Windows/include/winternl.h @@ -505,6 +505,7 @@ NTSTATUS WINAPI LdrDisableThreadCalloutsForDll(HMODULE); NTSTATUS WINAPI LdrGetDllFullName(HMODULE, UNICODE_STRING*); NTSTATUS WINAPI LdrGetDllHandle(LPCWSTR, ULONG, const UNICODE_STRING*, HMODULE*); NTSTATUS WINAPI LdrGetProcedureAddress(HMODULE, const ANSI_STRING*, ULONG, void**); +IMAGE_BASE_RELOCATION* WINAPI LdrProcessRelocationBlock(ULONG_PTR, ULONG, USHORT*, INT_PTR); NTSTATUS WINAPI NtAllocateVirtualMemoryEx(HANDLE, PVOID*, SIZE_T*, ULONG, ULONG, MEM_EXTENDED_PARAMETER*, ULONG); NTSTATUS WINAPI NtAllocateVirtualMemory(HANDLE, PVOID*, ULONG_PTR, SIZE_T*, ULONG, ULONG); NTSTATUS WINAPI NtContinue(PCONTEXT, BOOLEAN); @@ -538,6 +539,7 @@ ULONG WINAPI RtlFindClearBitsAndSet(PRTL_BITMAP, ULONG, ULONG); ULONG WINAPI RtlGetCurrentDirectory_U(ULONG, LPWSTR); PIMAGE_NT_HEADERS WINAPI RtlImageNtHeader(HMODULE); PVOID WINAPI RtlImageDirectoryEntryToData(HMODULE, BOOL, WORD, ULONG*); +PIMAGE_SECTION_HEADER WINAPI RtlImageRvaToSection(const IMAGE_NT_HEADERS*, HMODULE, DWORD); void WINAPI RtlInitializeConditionVariable(RTL_CONDITION_VARIABLE*); NTSTATUS WINAPI RtlInitializeCriticalSection(RTL_CRITICAL_SECTION*); void WINAPI RtlInitializeSRWLock(RTL_SRWLOCK*); From 23de875516807f7afb3ce471148eeb1de0795323 Mon Sep 17 00:00:00 2001 From: Billy Laws Date: Sun, 17 May 2026 23:06:02 +0100 Subject: [PATCH 3/3] Windows: Add NtUnmapViewOfSection prototype --- Source/Windows/include/winternl.h | 1 + 1 file changed, 1 insertion(+) diff --git a/Source/Windows/include/winternl.h b/Source/Windows/include/winternl.h index 4218575bc..2ad0970fc 100644 --- a/Source/Windows/include/winternl.h +++ b/Source/Windows/include/winternl.h @@ -517,6 +517,7 @@ NTSTATUS WINAPI NtFreeVirtualMemory(HANDLE, PVOID*, SIZE_T*, ULONG); NTSTATUS WINAPI NtGetContextThread(HANDLE, CONTEXT*); ULONG WINAPI NtGetCurrentProcessorNumber(void); NTSYSAPI NTSTATUS WINAPI NtMapViewOfSection(HANDLE, HANDLE, PVOID*, ULONG_PTR, SIZE_T, const LARGE_INTEGER*, SIZE_T*, SECTION_INHERIT, ULONG, ULONG); +NTSYSAPI NTSTATUS WINAPI NtUnmapViewOfSection(HANDLE, PVOID); NTSTATUS WINAPI NtOpenKeyEx(PHANDLE, ACCESS_MASK, const OBJECT_ATTRIBUTES*, ULONG); NTSTATUS WINAPI NtProtectVirtualMemory(HANDLE, PVOID*, SIZE_T*, ULONG, ULONG*); NTSTATUS WINAPI NtQueryAttributesFile(const OBJECT_ATTRIBUTES*, FILE_BASIC_INFORMATION*);