| ホーム アプリケーション ライブラリ 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 賛歌 |