Windows 7关闭问题/ ExitWindowsEx / AdjustTokenPrivileges

时间:2015-10-17 06:32:05

标签: c++ windows winapi shutdown

你好所有stackoverflow伟大的头脑!!我需要一些解释和建议来确定导致这个问题的原因。我希望没有人会受到骚扰,并会直接判断。如果此处不清楚,请善意回复。

我有一个我正在调查的应用程序。如果从其中一个子进程发布了关闭电源消息,应用程序将关闭Windows。

方案: 当我启动应用程序并发布关机消息时,没有任何事情发生在Windows上,只有应用程序退出。第二次启动应用程序然后再次发布关闭电源的消息,Windows关闭或重新启动,具体取决于我发送的条件。

HANDLE  hToken;
TOKEN_PRIVILEGES  tp;
OpenProcessToken(GetCurrentProcess(),
    TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken);
LookupPrivilegeValue(NULL,
    SE_SHUTDOWN_NAME, &(tp.Privileges[0].Luid));
tp.PrivilegeCount = 1;
tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken, FALSE, &tp, sizeof(tp), NULL, NULL);
if ( iApplicationProblemOccured == 1 ){
        ExitWindowsEx(EWX_FORCE | EWX_SHUTDOWN | EWX_POWEROFF, 0L);
    } else {
        if(wShutdownType != 1) {
            ExitWindowsEx(EWX_FORCE | EWX_REBOOT, 0L);
        } else {
            ExitWindowsEx(EWX_FORCE | EWX_SHUTDOWN | EWX_POWEROFF, 0L);
        }
    }
    AdjustTokenPrivileges(hToken, TRUE, &tp, sizeof(tp), NULL, NULL);
    ExitProcess(0);

问题是为什么从第一次断电开始执行ExitWindowsEx不起作用? 我已经从第一次断电检查了tokenpriveleges,但它已启用。 我还将exitWindowsEx中的dwReason更改为计划,但没有任何反应。 从我读到的内容  https://msdn.microsoft.com/en-us/library/windows/desktop/aa376868(v=vs.85).aspx 如果ExitWindowsEx的返回值为0,则不一定确定执行windows shutdown会成功,因为该函数只会启动关闭过程。 我认为有一些进程/服务可以阻止Windows关闭进程从第一次关闭电源。 在我的应用程序发送关闭请求后,有没有办法调试Windows关闭进程?

我希望有人可以帮我解决这个问题!! 非常感谢..

0 个答案:

没有答案