Windows的关机和重起

平时用的最多的是开始菜弹中进行windows的关机或者重启,或者当远程某台电脑台,由于远程session并未提供关机或重启按钮,这时我们经常通过dos命令行来实现关机或重启。
如用如下命令执行立即重启

shutdown -r -t 0

那么怎么通过程序来实现呢?
windows api提供了一个api函数ExitWindowsEx来实现关机或重启。
对于WIN9X系统,可以直接调用,对于WIN2K以上,出于安全考虑,稍有不同,下面分别看一下.

9X系统:

ExitWindowsEx(EWX_LOGOFF,0);     //注销
ExitWindowsEx(EWX_REBOOT,0);     //重启
ExitWindowsEx(EWX_SHUTDOWN,0);   //关机

在程序中直接调用即可.

windows 2000以上系统:

需要相应应的权限,代码如下:

    HANDLE hToken;
    TOKEN_PRIVILEGES tkp;
    OSVERSIONINFO osvi;
    osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);                               // 取得系统版本

    if (GetVersionEx(&osvi) == 0)
    {
        return false;
    }

    if (osvi.dwPlatformId == VER_PLATFORM_WIN32_NT)
    {
        // Windows NT 3.51, Windows NT 4.0, Windows 2000,
        // Windows XP,  Windows .NET Server win7,win8,win10

        //打开当前进程访问token
        if(!OpenProcessToken(GetCurrentProcess(),
        TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY, &hToken))
         {
            return false;     
         }                                    

        //获取本地唯一标识用于在特定系统中设置权限
        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);

     }

    ExitWindowsEx(EWX_FORCE, 0);//强制关机,不向进程发送WM_QUERYENDSESSION消息
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

Powered by bytekits.com,汇天下文字,成非凡梦想!!!