调整当前进程权限并关机

核心代码片断:

if (!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken;)) { MessageBox(“OpenProcessToken failed!”); }

LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME,&tkp.Privileges;[0].Luid); //获得本地机唯一的标识
tkp.PrivilegeCount = 1;
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken, FALSE, &tkp;, 0,(PTOKEN_PRIVILEGES) NULL, 0); //调整获得的权限

if (GetLastError() != ERROR_SUCCESS)
{
    MessageBox("切换系统级权限失败!");
}

fResult =InitiateSystemShutdown(
     NULL,                                  // 要关的计算机用户名
     "关机时间已到,WINDOWS将在上面的时间内关机,请做好保存工作!",  // 显示的消息
     10,                                    // 关机所需的时间
     TRUE,                                 // ask user to close apps
     FALSE);                               //设为TRUE为重起,设为FALSE为关机
if(!fResult)
{
     MessageBox("初始化系统关机失败!");
}

tkp.Privileges[0].Attributes = 0;
AdjustTokenPrivileges(hToken, FALSE, &tkp;, 0,(PTOKEN_PRIVILEGES) NULL, 0);

if (GetLastError() != ERROR_SUCCESS)
{
     MessageBox("AdjustTokenPrivileges disable failed.");
}

ExitWindowsEx(EWX_SHUTDOWN,0);
支持原创技术分享,据说打赏我的人,都找到了女朋友!