Fixes 2K Launcher failure on start (which is using Chromium) with Windows version set to 8.1+ in the prefix (although newer CEF versions don't have Win 7/8.0 fallback here at all).
The failure happens in chromium/sandbox/win/src/win_utils.cc:GetCurrentProcessHandles().
The version which the launcher is using has a Win7 / 8.0 fallback if NtQueryInformationProcess( ProcessHandleTable ) but before going for fallback it asserts that the reported Windows version is less than 8.1 and the process crashes from assert's int3 exception. Newer versions of Chromium don't have Win7/8.0 fallback at all, so going to fail without ProcessHandleTable success regardless of prefix version if hit this path.
From: Paul Gofman pgofman@codeweavers.com
--- dlls/ntdll/unix/process.c | 6 ++++++ include/winternl.h | 1 + 2 files changed, 7 insertions(+)
diff --git a/dlls/ntdll/unix/process.c b/dlls/ntdll/unix/process.c index ca153a30bf2..4b9c42467e7 100644 --- a/dlls/ntdll/unix/process.c +++ b/dlls/ntdll/unix/process.c @@ -1343,6 +1343,7 @@ NTSTATUS WINAPI NtQueryInformationProcess( HANDLE handle, PROCESSINFOCLASS class else if (!handle) ret = STATUS_INVALID_HANDLE; else { + FIXME( "ProcessHandleCount (%p,%p,0x%08x,%p) stub\n", handle, info, (int)size, ret_len ); memset(info, 0, 4); len = 4; } @@ -1355,6 +1356,11 @@ NTSTATUS WINAPI NtQueryInformationProcess( HANDLE handle, PROCESSINFOCLASS class } break;
+ case ProcessHandleTable: + FIXME( "ProcessHandleTable (%p,%p,0x%08x,%p) stub\n", handle, info, (int)size, ret_len ); + len = 0; + break; + case ProcessAffinityMask: len = sizeof(ULONG_PTR); if (size == len) diff --git a/include/winternl.h b/include/winternl.h index a7f82073ad5..de5630ecf49 100644 --- a/include/winternl.h +++ b/include/winternl.h @@ -1574,6 +1574,7 @@ typedef enum _PROCESSINFOCLASS { ProcessConsoleHostProcess = 49, ProcessWindowInformation = 50, ProcessHandleInformation = 51, + ProcessHandleTable = 58, ProcessPowerThrottlingState = 77, ProcessLeapSecondInformation = 97, MaxProcessInfoClass,