HANDLE handle;
BOOL open = OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &handle);
if(!open)
{
AfxMessageBox(TEXT("打开进程令牌失败!"));
return;
}
TOKEN_PRIVILEGES tkp;
BOOL lookup = LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &tkp.Privileges[0].Luid);
tkp.PrivilegeCount = 1; //权限的数量是1
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; //使权限有效
if(!lookup)
{
AfxMessageBox(TEXT("浏览权限失败!"));
return;
}
BOOL atp = AdjustTokenPrivileges(handle, FALSE, &tkp, 0, (PTOKEN_PRIVILEGES)NULL, 0);
if( GetLastError() == ERROR_SUCCESS)
{
AfxMessageBox(TEXT("权限提升成功!"));
}
这里主要使用了三个函数OpenProcessToken, LookupPrivilegeValue, AdjustTokenPrivileges