void err(char *errM,DWORD errC)
{
printf("%s %d\n",errM,errC);
}
BOOL SetPrivileges()
{
HANDLE hToken;
BOOL bRet = FALSE;
do
{
if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hToken))
{
err("OpenThreadToken: %u\n", GetLastError());
break;
}
TOKEN_PRIVILEGES tp;
LUID luid0, luid1;
if (!LookupPrivilegeValueA(NULL, SE_TAKE_OWNERSHIP_NAME, &luid0))
{
err("LookupPrivilegeValue SE_TAKE_OWNERSHIP_NAME error: %u\n", GetLastError());
break;
}
if (!LookupPrivilegeValueA(NULL, SE_DEBUG_NAME, &luid1))
{
err("LookupPrivilegeValue SE_DEBUG_NAME error: %u\n", GetLastError());
break;
}
tp.PrivilegeCount = 2;
tp.Privileges[0].Attributes = tp.Privileges[1].Attributes = SE_PRIVILEGE_ENABLED;
tp.Privileges[0].Luid = luid0;
tp.Privileges[1].Luid = luid1;
if (!AdjustTokenPrivileges(hToken, FALSE, &tp, sizeof(TOKEN_PRIVILEGES), NULL, NULL))
{
err("AdjustTokenPrivileges error: %u\n", GetLastError());
break;
}
else
bRet = TRUE;
} while (0);
CloseHandle(hToken);
return bRet;
}