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;
       
}

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

你可能感兴趣的:(shell,null,query,exe,token)