Rodriguezs 发表于 2020-4-28 12:33

为什么ExitWindows EWX_SHUTDOWN只能注销,不能关机呢?

#include <windows.h>
#include <iostream>

int main()
{
    HANDLE hToKen;
    TOKEN_PRIVILEGES tkp;//存储当前权限
    if(OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY,&hToKen));
    {
      printf("获得权限失败");
    }
    //拿出权限
    LookupPrivilegeValue(NULL,SE_SHUTDOWN_NAME,&tkp.Privileges.Luid);
    //更改权限
    tkp.PrivilegeCount = 1;
    tkp.Privileges.Attributes = SE_PRIVILEGE_ENABLED;
    //使用权限
    AdjustTokenPrivileges(hToKen,FALSE,&tkp,0,(PTOKEN_PRIVILEGES)NULL,0);
    //检测权限是否更改成功
    if(GetLastError() != ERROR_SUCCESS)
    {
      printf("权限未更改");
    }

    //ExitWindows(EWX_SHUTDOWN,0); 为什么这行代码只能注销不能关机
   
    if (!ExitWindowsEx(EWX_SHUTDOWN | EWX_FORCE,
               SHTDN_REASON_MAJOR_OPERATINGSYSTEM |
               SHTDN_REASON_MINOR_UPGRADE |
               SHTDN_REASON_FLAG_PLANNED))

    return 0;
}

无闻无问 发表于 2020-4-28 13:11

本帖最后由 无闻无问 于 2020-4-28 13:14 编辑

我觉得提权没成功…

xiaojiang_320 发表于 2020-4-28 13:17

关机命令不是shutdown吗

无闻无问 发表于 2020-4-28 13:18

无闻无问 发表于 2020-4-28 13:11
我觉得提权没成功…

用另一个提权函数RtlAdjustPrivilege试试……

无闻无问 发表于 2020-4-28 13:23

兄弟,我把你的代码粘贴生成,能成功关机…vs2015+win7成功的…

Rodriguezs 发表于 2020-4-28 13:27

无闻无问 发表于 2020-4-28 13:23
兄弟,我把你的代码粘贴生成,能成功关机…vs2015+win7成功的…

主要是用注释的那一行,无法关机,必须用下面那行,不知为什么?

无闻无问 发表于 2020-4-28 13:33

Rodriguezs 发表于 2020-4-28 13:27
主要是用注释的那一行,无法关机,必须用下面那行,不知为什么?

注释那行加个Ex…

Rodriguezs 发表于 2020-4-28 13:58

无闻无问 发表于 2020-4-28 13:33
注释那行加个Ex…

哦,谢谢呀。
页: [1]
查看完整版本: 为什么ExitWindows EWX_SHUTDOWN只能注销,不能关机呢?