1 // Common/MemoryLock.cpp
9 typedef BOOL (WINAPI * OpenProcessTokenP)(HANDLE ProcessHandle, DWORD DesiredAccess, PHANDLE TokenHandle);
10 typedef BOOL (WINAPI * LookupPrivilegeValueP)(LPCTSTR lpSystemName, LPCTSTR lpName, PLUID lpLuid);
11 typedef BOOL (WINAPI * AdjustTokenPrivilegesP)(HANDLE TokenHandle, BOOL DisableAllPrivileges,
12 PTOKEN_PRIVILEGES NewState, DWORD BufferLength, PTOKEN_PRIVILEGES PreviousState,PDWORD ReturnLength);
16 bool EnableLockMemoryPrivilege(
18 static bool EnableLockMemoryPrivilege2(HMODULE hModule,
25 OpenProcessTokenP openProcessToken = (OpenProcessTokenP)GetProcAddress(hModule, "OpenProcessToken");
26 LookupPrivilegeValueP lookupPrivilegeValue = (LookupPrivilegeValueP)GetProcAddress(hModule, "LookupPrivilegeValueA" );
27 AdjustTokenPrivilegesP adjustTokenPrivileges = (AdjustTokenPrivilegesP)GetProcAddress(hModule, "AdjustTokenPrivileges");
28 if (openProcessToken == NULL || adjustTokenPrivileges == NULL || lookupPrivilegeValue == NULL)
39 (::GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &token))
45 ::LookupPrivilegeValue
49 (NULL, SE_LOCK_MEMORY_NAME, &(tp.Privileges[0].Luid)))
51 tp.PrivilegeCount = 1;
52 tp.Privileges[0].Attributes = enable ? SE_PRIVILEGE_ENABLED: 0;
55 ::AdjustTokenPrivileges
59 (token, FALSE, &tp, 0, NULL, NULL))
60 res = (GetLastError() == ERROR_SUCCESS);
67 bool EnableLockMemoryPrivilege(bool enable)
69 HMODULE hModule = LoadLibrary(TEXT("Advapi32.dll"));
72 bool res = EnableLockMemoryPrivilege2(hModule, enable);
73 ::FreeLibrary(hModule);