プログラミングメモ →目次


Windowsをシャットダウンする方法(VC++)

ExitWindowsEx()APIを使って、現在のユーザーをログオフさせたり、Windowsをシャットダウンしたりできます。制御応用の場合は、この機能はよく使われています。Windowsをシャットダウンする前に、シャットダウン権限を有効させる処理が必要です。

void ShutdownSystem_Test()
{
    HANDLE hToken;
    TOKEN_PRIVILEGES tokenPriv;
    BOOL bRet;

//アクセストークンを開く
    bRet = OpenProcessToken(GetCurrentProcess(),
                                         TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY,
                                         &hToken);
//シャットダウン権限のLUIDを取得する
    LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &(tokenPriv.Privileges[0].Luid));
    tokenPriv.PrivilegeCount = 1;
    tokenPriv.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;

//シャットダウン権限のLUIDで、シャットダウン権限を有効にする
    bRet = AdjustTokenPrivileges(hToken, FALSE, &tokenPriv, 0, NULL, NULL);

//システムをシャットダウンさせる
    ExitWindowsEx(EWX_SHUTDOWN, 0);

//現在のユーザーをログオフさせる
    //ExitWindowsEx(EWX_LOGOFF, 0);

//システムをシャットダウンした後システムを再起動する
    //ExitWindowsEx(EWX_REBOOT, 0);
}