iTimothy

君看一叶舟,出没风波里

0%

调整当前进程权限并关机

核心代码片断:

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);
支持原创技术分享,据说打赏我的人,都找到了女朋友!