我想防止在 Windows 7 上关闭我成功获得 se_shutdown_privilege,但 AbortSystemShutdown 总是失败我尝试了 AbortSystemShutdown(NULL)、AbortSystemShutdown("127.0.0.1")、AbortSystemShutdown(PcName)。
至今没有成功。
我想防止在 Windows 7 上关闭我成功获得 se_shutdown_privilege,但 AbortSystemShutdown 总是失败我尝试了 AbortSystemShutdown(NULL)、AbortSystemShutdown("127.0.0.1")、AbortSystemShutdown(PcName)。
至今没有成功。
显然,中止由InitiateSystemShutdown(以及该函数的ExAbortSystemShutDown
版本)调用的关闭,而不是.ExitWindows
InitiateSystemShutdown 和 InitiateSystemShutdownEx 函数显示一个对话框,通知用户系统正在关闭。在关机超时期间,AbortSystemShutdown 函数可以防止系统关机。
这在 Windows 7 x64 上对我来说很好。由于您没有发布任何代码,我不知道您在做什么不同。该SetPrivilege
函数是从这个 MSDN 页面复制的:http: //msdn.microsoft.com/en-us/library/windows/desktop/aa446619%28v=vs.85%29.aspx
我通过在命令提示符中键入以下内容来启动关机:'shutdown /s /t 500000' 并运行程序将其取消。
#include <Windows.h>
#include <stdio.h>
BOOL SetPrivilege(HANDLE hToken, LPCTSTR lpszPrivilege, BOOL bEnablePrivilege)
{
TOKEN_PRIVILEGES tp;
LUID luid;
if ( !LookupPrivilegeValue(NULL, lpszPrivilege, &luid ) )
{
printf("LookupPrivilegeValue error: %u\n", GetLastError() );
return FALSE;
}
tp.PrivilegeCount = 1;
tp.Privileges[0].Luid = luid;
tp.Privileges[0].Attributes = bEnablePrivilege ? SE_PRIVILEGE_ENABLED : 0;
if ( !AdjustTokenPrivileges(hToken, FALSE, &tp, sizeof(TOKEN_PRIVILEGES), (PTOKEN_PRIVILEGES) NULL, (PDWORD) NULL) )
{
printf("AdjustTokenPrivileges error: %u\n", GetLastError() );
return FALSE;
}
if (GetLastError() == ERROR_NOT_ALL_ASSIGNED)
{
printf("The token does not have the specified privilege. \n");
return FALSE;
}
return TRUE;
}
int main()
{
HANDLE hToken;
OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hToken);
if(!SetPrivilege(hToken, SE_SHUTDOWN_NAME, TRUE))
{
printf("Could not adjust privileges\n");
}
if(!AbortSystemShutdown(NULL))
{
printf("AbortSystemShutdown failed (%08x)", GetLastError());
}
CloseHandle(hToken);
return 0;
}