ホーム アプリケーション ライブラリ Tips くだらないTips リンク集 Borland 賛歌 |
![]() |
![]() |
■NT でのシャットダウン NT でのシャットダウン方法 ここでは、以下のような関数を用意します。 引数 ServerName : シャットダウンするコンピュータ名 Mode : 権限取得/True, 権限開放/False 返却値 権限取得成功時 : True 権限取得失敗時時 : False function AccessPrivilege(const ServerName:String; const Mode:Boolean):Boolean; const SE_SHUTDOWN_NAME = 'SeShutdownPrivilege'; var htoken:THandle; tknPrvlgs, tknPrvlgs2:TOKEN_PRIVILEGES; success:Boolean; res:DWORD; begin if Win32Platform = VER_PLATFORM_WIN32_NT then begin Result := False; success := OpenProcessToken( GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, htoken ); if not success then Exit; success := LookupPrivilegeValue( PChar(ServerName), PChar(SE_SHUTDOWN_NAME), tknPrvlgs.Privileges[0].Luid ); if not success then Exit; tknPrvlgs.PrivilegeCount := 1; if Mode then tknPrvlgs.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED else tknPrvlgs.Privileges[0].Attributes := 0; AdjustTokenPrivileges( htoken, False, tknPrvlgs, SizeOf(tknPrvlgs2), tknPrvlgs2, res ); if GetLastError() <> ERROR_SUCCESS then Exit; end; Result := True; end; // 呼びだし元 procedure hogehoge; begin if not AccessPrivilege('', True) then begin ShowMessage('シャットダウン権限の取得に失敗しました。'); Exit; end else if not ExitWindowsEx(EWX_SHUTDOWN or EWX_FORCE, 0) then begin ShowMessage('シャットダウンに失敗しました。'); end; AccessPrivilege('', False); end; |
ホーム アプリケーション ライブラリ Tips くだらないTips リンク集 Borland 賛歌 |