パソコンの電源を切る
パソコンの電源を切る。(Windows NT以上)
OpenProcessTokenで取得したハンドルはCloseHandleで解放する。
日本語版MSDNには、そのこと書いて無いから注意!
英語版MSDN OpenProcessToken
HANDLE hToken; TOKEN_PRIVILEGES tp; LUID luid; BOOL bResult; //アクセストークンを開く bResult = OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hToken); if(! bResult) { return; } //シャットダウン特権を取得 bResult = LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &luid) if(! bResult) { CloseHandle(hToken); return; } //アクセストークンの変更を実行 tp.PrivilegeCount = 1; tp.Privileges[0].Luid = luid; tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; bResult = AdjustTokenPrivileges(hToken, FALSE, &tp, 0, (PTOKEN_PRIVILEGES)NULL, (PDWORD)NULL) if(! bResult) { CloseHandle(hToken); return; } //アクセストークンを閉じる CloseHandle(hToken); //パソコンの電源を切る ExitWindowsEx(EWX_POWEROFF, 0);