winewind
驱动牛犊
驱动牛犊
  • 注册日期2003-09-13
  • 最后登录2004-01-16
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1238回复:0

不知道这是不是一个快速关机的途径

楼主#
更多 发布于:2003-09-15 11:08
我用的系统是xp,经常发生关机不响应,运行程序也行,就是不肯关机,不知道大家有没有这样的经历

一般windows关机调用的是ExitWindowsEx这个函数,可是好像有时不响应,我也不知道为什么。

如果win的一些服务,比如rpc被强制关掉,win会强制关机或重启,调用的是InitiateSystemShutdown这个函数。这个咚咚好像比较powerful一点,每次不响应我都是关rpc让系统一分钟以后自动重启,省得直接按power键回头自检。

至于为什么win重启或者关机在不同的情况下调用不同的函数,我不清楚,请高手指点。还有使用InitiateSystemShutdown是不是有什么缺陷也是我不懂的。MSDN的建议是把所有top-level的windows都历遍,挨个请求关闭,这样可能安全一点。

不过如果自己注意把一些要保存的程序关闭了,比如word什么的,用下面的程序确实能快一点。个中原因,请大家不吝指教了。

代码简单的我都不好意思贴出来了

//Shutdown the machine

#include <windows.h>
#include <stdio.h>

void main()
{
            HANDLE hToken;
            TOKEN_PRIVILEGES tkp;
            if(!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY,&hToken))
            return;
            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);

    
    InitiateSystemShutdown(
        NULL,
        NULL,
        0,
        TRUE,
        FALSE        
        );

}


最新喜欢:

txqxctxqxc
游客

返回顶部