1
0
Fork 0
mirror of https://github.com/sockspls/badfish synced 2025-05-01 17:19:36 +00:00

Fix linking / character types of windows API calls

ensures large pages can be allocated again.

closes https://github.com/official-stockfish/Stockfish/pull/4509

No functional change
This commit is contained in:
Maxim Masiutin 2023-04-01 20:14:41 +03:00 committed by Joost VandeVondele
parent b36d39de3d
commit 5d258e168f

View file

@ -490,25 +490,29 @@ static void* aligned_large_pages_alloc_windows([[maybe_unused]] size_t allocSize
return nullptr; return nullptr;
// Dynamically link OpenProcessToken, LookupPrivilegeValue and AdjustTokenPrivileges // Dynamically link OpenProcessToken, LookupPrivilegeValue and AdjustTokenPrivileges
HMODULE k32 = GetModuleHandle("Advapi32.dll");
auto fun6 = (fun6_t)(void(*)())GetProcAddress(k32, "OpenProcessToken"); HMODULE hAdvapi32 = GetModuleHandle(TEXT("advapi32.dll"));
if (!hAdvapi32)
hAdvapi32 = LoadLibrary(TEXT("advapi32.dll"));
auto fun6 = (fun6_t)(void(*)())GetProcAddress(hAdvapi32, "OpenProcessToken");
if (!fun6) if (!fun6)
return nullptr; return nullptr;
auto fun7 = (fun7_t)(void(*)())GetProcAddress(k32, "LookupPrivilegeValueA"); auto fun7 = (fun7_t)(void(*)())GetProcAddress(hAdvapi32, "LookupPrivilegeValueA");
if (!fun7) if (!fun7)
return nullptr; return nullptr;
auto fun8 = (fun8_t)(void(*)())GetProcAddress(k32, "AdjustTokenPrivileges"); auto fun8 = (fun8_t)(void(*)())GetProcAddress(hAdvapi32, "AdjustTokenPrivileges");
if (!fun8) if (!fun8)
return nullptr; return nullptr;
// We need SeLockMemoryPrivilege, so try to enable it for the process // We need SeLockMemoryPrivilege, so try to enable it for the process
// OpenProcessToken() if (!fun6( // OpenProcessToken()
if (!fun6(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hProcessToken)) GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hProcessToken))
return nullptr; return nullptr;
// LookupPrivilegeValueA() if (fun7( // LookupPrivilegeValue(nullptr, SE_LOCK_MEMORY_NAME, &luid)
if (fun7(nullptr, SE_LOCK_MEMORY_NAME, &luid)) nullptr, "SeLockMemoryPrivilege", &luid))
{ {
TOKEN_PRIVILEGES tp { }; TOKEN_PRIVILEGES tp { };
TOKEN_PRIVILEGES prevTp { }; TOKEN_PRIVILEGES prevTp { };
@ -520,8 +524,7 @@ static void* aligned_large_pages_alloc_windows([[maybe_unused]] size_t allocSize
// Try to enable SeLockMemoryPrivilege. Note that even if AdjustTokenPrivileges() succeeds, // Try to enable SeLockMemoryPrivilege. Note that even if AdjustTokenPrivileges() succeeds,
// we still need to query GetLastError() to ensure that the privileges were actually obtained. // we still need to query GetLastError() to ensure that the privileges were actually obtained.
// AdjustTokenPrivileges() if (fun8( // AdjustTokenPrivileges()
if (fun8(
hProcessToken, FALSE, &tp, sizeof(TOKEN_PRIVILEGES), &prevTp, &prevTpLen) && hProcessToken, FALSE, &tp, sizeof(TOKEN_PRIVILEGES), &prevTp, &prevTpLen) &&
GetLastError() == ERROR_SUCCESS) GetLastError() == ERROR_SUCCESS)
{ {
@ -531,8 +534,8 @@ static void* aligned_large_pages_alloc_windows([[maybe_unused]] size_t allocSize
nullptr, allocSize, MEM_RESERVE | MEM_COMMIT | MEM_LARGE_PAGES, PAGE_READWRITE); nullptr, allocSize, MEM_RESERVE | MEM_COMMIT | MEM_LARGE_PAGES, PAGE_READWRITE);
// Privilege no longer needed, restore previous state // Privilege no longer needed, restore previous state
// AdjustTokenPrivileges () fun8( // AdjustTokenPrivileges ()
fun8(hProcessToken, FALSE, &prevTp, 0, nullptr, nullptr); hProcessToken, FALSE, &prevTp, 0, nullptr, nullptr);
} }
} }