#include <stdio.h>
#include <windows.h>
bool EnableDebugPrivilege();
bool UpPrivilege();
BOOL EnablePrivilege(LPCTSTR lpszPrivilegeName, BOOL bEnable);
int main(void)
{
if (EnableDebugPrivilege())
{
wprintf(TEXT("EnableDebugPrivilege() ok\n"));
}
else
{
wprintf(TEXT("EnableDebugPrivilege() error\n"));
}
if (UpPrivilege())
{
wprintf(TEXT("UpPrivilege() ok\n"));
}
else
{
wprintf(TEXT("UpPrivilege() error\n"));
}
if (EnablePrivilege(SE_ASSIGNPRIMARYTOKEN_NAME, TRUE))
{
wprintf(TEXT("EnablePrivilege() ok\n"));
}
else
{
wprintf(TEXT("EnablePrivilege() error\n"));
}
getchar();
getchar();
return 0;
}
bool EnableDebugPrivilege()
{
HANDLE hToken;
LUID sedebugnameValue;
TOKEN_PRIVILEGES tkp;
if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
{
return false;
}
if (!LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &sedebugnameValue))
{
CloseHandle(hToken);
return false;
}
tkp.PrivilegeCount = 1;
tkp.Privileges[0].Luid = sedebugnameValue;
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
if (!AdjustTokenPrivileges(hToken, FALSE, &tkp, sizeof(tkp), NULL, NULL))
{
CloseHandle(hToken);
return false;
}
return true;
}
bool UpPrivilege()
{
HANDLE hToken;
TOKEN_PRIVILEGES tkp;
bool result;
result = OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken);
if (!result)return false;
result = LookupPrivilegeValue(NULL,SE_DEBUG_NAME,&tkp.Privileges[0].Luid);
if (!result)return false;
tkp.PrivilegeCount = 1;
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
result = AdjustTokenPrivileges(hToken,FALSE,&tkp,sizeof(TOKEN_PRIVILEGES),(PTOKEN_PRIVILEGES)NULL,(PDWORD)NULL);
return result;
}
BOOL EnablePrivilege(LPCTSTR lpszPrivilegeName, BOOL bEnable)
{
HANDLE hToken;
TOKEN_PRIVILEGES tp;
LUID luid;
BOOL bRet = FALSE;
DWORD dwerror;
if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES |TOKEN_QUERY | TOKEN_READ, &hToken))
return FALSE;
if (!LookupPrivilegeValue(NULL, lpszPrivilegeName, &luid))
return TRUE;
tp.PrivilegeCount = 1;
tp.Privileges[0].Luid = luid;
tp.Privileges[0].Attributes = (bEnable) ? SE_PRIVILEGE_ENABLED : 0;
if (AdjustTokenPrivileges(hToken, FALSE, &tp, NULL, NULL, NULL))
{
bRet = TRUE;
dwerror=GetLastError();
}
CloseHandle(hToken);
return bRet;
}
进程提权
最新推荐文章于 2023-03-27 19:56:08 发布