系统关闭函数(例)

1、ExitWindowsEx

#include <tchar.h>
#include <windows.h>

int _tmain(int argc, _TCHAR* argv[])
{
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_SHUTDOWN, SHTDN_REASON_MAJOR_LEGACY_API);

return 0;
}

2、InitiateSystemShutdown

#include <tchar.h>
#include <windows.h>

int _tmain(int argc, _TCHAR* argv[])
{
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);

InitiateSystemShutdown(NULL, _T("Shutdown?"), 30, FALSE, FALSE);

tkp.Privileges[0].Attributes = 0;
AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, (PTOKEN_PRIVILEGES) NULL, 0);

return 0;
}

留下评论

您的邮箱地址不会被公开。 必填项已用 * 标注