Windows中的普通进程是有一定权限的,想要做一些超出权限的事情,就要提权。比如关机:
#include <stdio.h>
#include <Windows.h>
int main()
{
HANDLE hToken;
TOKEN_PRIVILEGES tkp;
// 获取当前进程访问标记
if( OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY, &hToken)==0 )
return FALSE;
// 生成TOKEN_PRIVILEGES结构
LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME,&tkp.Privileges[0].Luid); // 查看系统权限特权值,返回信息到LUID结构体里
tkp.PrivilegeCount = 1; // one privilege to set
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
// 使当前进程有关机权限
AdjustTokenPrivileges(hToken, FALSE, &tkp, 0,(PTOKEN_PRIVILEGES)NULL, 0);
if( GetLastError()!=ERROR_SUCCESS )
return FALSE;
// 关闭系统,强制所有应用关闭
if( !ExitWindowsEx( EWX_SHUTDOWN|EWX_FORCE, 0 ) )
return FALSE;
return 0;
}
1、获取本进程可以修改(调整)权限的令牌。
2、找到关机权限值
3、给本进程增加关机权限