InitiateShutdown 関数を使って Windows をシャットダウンするコードは下記のようになります。
シャットダウンをするには SE_SHUTDOWN_NAME 特権を有効にしておく必要があるため AdjustTokenPrivileges 関数を使って特権を有効にしています。
コードでは InitiateShutdown 関数の引数として SHUTDOWN_FORCE_SELF | SHUTDOWN_POWEROFF を渡していますが、SHUTDOWN_RESTART フラグを組み合わせることで再起動させることもできます。
詳しくは、ドキュメントをご参照ください。

void Shutdown()
{
	HANDLE           hToken =  NULL;
	TOKEN_PRIVILEGES tp = { 0 };

	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, 0, 0, 0);

	InitiateShutdown(0, 0, 0, SHUTDOWN_FORCE_SELF | SHUTDOWN_POWEROFF, 0);
}

参考サイト: https://msdn.microsoft.com/ja-jp/library/windows/desktop/aa376872%28v=vs.85%29.aspx


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です