名前 題名 ▼ たてぐやさん > ▼ Mr.XRAYさん > > こんなコードがあったとします。 > > {=============================================================================== > Windowsをシャットダウンさせる。 > ===============================================================================} > procedure TFrmSet.Shutdown; > var > hToken: THandle; > tkp: TTokenPrivileges; > dwRet: DWORD; > begin > // このプロセスのためのトークンを取得。 > if (not OpenProcessToken(GetCurrentProcess, > (TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY), hToken)) then > Writeln('OpenProcessToken'); > > // シャットダウンに必要な権限を取得。 > LookupPrivilegeValue(nil, 'SeShutdownPrivilege', tkp.Privileges[0].Luid); > tkp.PrivilegeCount := 1; // one privilege to set > tkp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; > dwRet := 0; > > // シャットダウンプロセスに必要な特権を取得。 > AdjustTokenPrivileges(hToken, false, tkp, 0, nil, dwRet); > > // AdjustTokenPrivilegesの戻り値をチェック。 > if (GetLastError <> ERROR_SUCCESS) then > Writeln('AdjustTokenPrivileges'); > > // 強制的にアプリケーションを終了させながら、シャットダウン。 > if (not ExitWindowsEx(EWX_SHUTDOWN or EWX_FORCE, 0)) then > Writeln('ExitWindowsEx'); > end; > > これ、おそらくUACにひっかかってダメだと思っていたのですが、すんなり > 通ってシャットダウンしました。多分「シャットダウンプロセスに必要な特権 > を取得します。」あたりで引っかかると思っていたのに意外でした。 > > ※コード悪用厳禁 GIF,JPEG,PNG画像ファイル及びLZH,ZIPファイルをアップロードできます.600 x 1200 ピクセルを超える画像は縮小表示されます(画像クリックで拡大表示). (上限122000(120k)バイト) 削除キー Link