关机程序代码

   (原创:新浪博客-玫瑰书城,是我的博客)

   一个普通的程序是没有激活关机权限的,需要获得令牌才可以调用ExitWindowsEx进行关机。

    代码如下:

 

     HANDLE             hToken;     
     TOKEN_PRIVILEGES   tkp;     

     OpenProcessToken(
                        GetCurrentProcess(),                 //获得当前进程的句柄
                        TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY, //可查询并修改权限
                        &hToken                //进程访问令牌的句柄传递给hToken
                        );    

        //先查看系统上SE_SHUTDOWN_NAME权限名的标识符(LUID),返回一个唯一的LUID标识符。
       
          LookupPrivilegeValue(
                            NULL,                     //计算机名,NULL表示指定本地系统
                            SE_SHUTDOWN_NAME,         //权限名称,表示允许关机
                            &tkp.Privileges[0].Luid   //给函数传递LUID结构指针,给LUID传
                                                     
                            );
   
        tkp.PrivilegeCount = 1;     //设置一个权限,只访问修改一个权限       
        tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; //说明权限是激活的
   
        //令牌hToken的权限修改为可以关机(SE_SHUTDOWN_NAME)。    
        AdjustTokenPrivileges(
                             hToken,   //令牌句柄
                             FALSE,    //表示要修改权限
                             &tkp,     //TOKEN_PRIVILEGES结构
                             0,        //第五个参数(NULL)这的字节数,为0
                             (PTOKEN_PRIVILEGES)NULL, //存放修改前的访问权限信息,为空
                             0         //返回第五个参数字节数的DWORD变量指针
                             );

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值