Create SetProcessPrivilegeToken.cpp

This commit is contained in:
vxunderground
2022-07-14 23:06:34 -05:00
committed by GitHub
parent a4ff98f5ff
commit 82c5f20124
+49
View File
@@ -0,0 +1,49 @@
BOOL SetProcessPrivilegeToken(DWORD PrivilegeEnum)
{
HANDLE Process = RfGetCurrentProcess();
HANDLE Token = INVALID_HANDLE_VALUE;
TOKEN_PRIVILEGES Privileges = { 0 };
DWORD TokenLength = 0;
LUID LocalId = { 0 };
BOOL bFlag = FALSE;
WCHAR PrivilegeString[256] = { 0 };
if (!OpenProcessToken(Process, TOKEN_QUERY | TOKEN_ADJUST_PRIVILEGES, &Token))
return FALSE;
switch (PrivilegeEnum)
{
case 0:
{
StringCopyW(PrivilegeString, (PWCHAR)L"SeDebugPrivilege");
break;
}
case 1:
{
StringCopyW(PrivilegeString, (PWCHAR)L"SeBackupPrivilege");
break;
}
default:
goto EXIT_ROUTINE;
}
if (LookupPrivilegeValueW(NULL, PrivilegeString, &LocalId))
{
Privileges.Privileges[0].Luid = LocalId;
Privileges.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
Privileges.PrivilegeCount = 1;
if (!AdjustTokenPrivileges(Token, FALSE, &Privileges, 0, NULL, &TokenLength))
goto EXIT_ROUTINE;
}
bFlag = TRUE;
EXIT_ROUTINE:
if (Token)
CloseHandle(Token);
return bFlag;
}