AdjustTokenPrivileges提权

         最近我在写一个程序的时候,需要用到ExitWindowsEx函数,使电脑重启,但是无论怎么使都是在vc6中可以运行,但是一旦生成了exe文件,就没有这种效果,于是乎上网找,上论坛上找,都没有结果。

      于是我开始怀疑ExitWindowsEx函数,就改用shellexecute函数,任然不顶用,我勒个去,但是无意间看到一位大神说到了shell函数的延时问题,于是我在想是不是因为程序本省以外结束进程使得生成的exe文件本身有问题,就禁用了系统某些功能,进行调试,生成了我认为完整的exe文件,结果还是不行。按照那位大神的说法,我有为程序做了个延迟::Sleep(500);结果还是不如人意,这时候就比较郁闷了。

      想了几天,终于回归到程序权限问题上来,上网查看了有关资料,猜测生成的exe文件独立于vc之外所以程序权限不一样,单独的控制台程序的权限不够使系统重启,关机,注销。于是乎提权成了当务之急。查了资料,写出了提权代码。代码如下:

BOOL Dshoutdown(void)
{
    HANDLE hToken; 
    TOKEN_PRIVILEGES tkp; 
    OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES
| TOKEN_QUERY, &hToken);
    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_REBOOT,
0);
   
return TRUE;
       
}

     诶,由此可见程序本身的编写是容易的,在菜鸟阶段(就像我),我觉得一些莫名其妙的错误是可怕的,因为你没有经验,所以纠错就比较难。先写这么多吧,望各位菜鸟好自为之。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值