bool privilege()
{
HANDLE hProcess = NULL;
HANDLE hToken = NULL; //包含特权的句柄
LUID uID = { 0 }; //本地唯一标识符
TOKEN_PRIVILEGES stToken_Privileges = { 0 }; //新特权信息的指针(结构体)
//获得当前进程句柄
hProcess = GetCurrentProcess();
//对当前进程权限修改,返回访问令牌指针
if (!OpenProcessToken(hProcess, TOKEN_ADJUST_PRIVILEGES, &hToken))
return false;
CloseHandle(hProcess);
//在本地系统查看系统权限特权值,存在LUID结构体里代表本地唯一标识符
if (!LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &uID))
return false;
stToken_Privileges.PrivilegeCount = 1; //数组元素个数
stToken_Privileges.Privileges[0].Luid = uID; //本地唯一标识符
stToken_Privileges.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; //特权启用
//启用访问令牌权限
if (!AdjustTokenPrivileges(hToken, FALSE, &stToken_Privileges, sizeof stToken_Privileges, NULL, NULL))
return false;
if (GetLastError() != ERROR_SUCCESS)
return false;
CloseHandle(hToken);
return true;
}