1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| Function ArretSystemDistant: Boolean;
Var
Token: THandle;
TokenPrivilege: TTokenPrivileges;
Outlen : Cardinal;
Error:Dword;
Const
SE_SHUTDOWN_NAME = 'SeShutdownPrivilege';
Begin
Result:=False;
// Récupère les informations de sécurité pour ce process.
if not OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES, Token)
then Exit;
try
FillChar(TokenPrivilege, SizeOf(TokenPrivilege),0);
// Valeur de retour
Outlen := 0;
// Un seul privilége à positionner
TokenPrivilege.PrivilegeCount := 1;
// Récupère le LUID pour le privilége 'shutdown'.
// un Locally Unique IDentifier est une valeur générée unique jusqu'a ce
// que le système soit redémarré
LookupPrivilegeValue('\\192.168.123.110', SE_SHUTDOWN_NAME, TokenPrivilege.Privileges[0].Luid);
// Positionne le privilége shutdown pour ce process.
TokenPrivilege.Privileges[0].Attributes:=SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(Token, False, TokenPrivilege, SizeOf(TokenPrivilege),nil, OutLen);
Error:=GetLastError;
If Error <> ERROR_SUCCESS
then Exit;
// Arrête le système distant
if InitiateSystemShutdown('\\192.168.123.110', 'Shutting down !', 10, True, False)=False
then Exit;
Result:=True;
finally
CloseHandle(Token);
end;
end; |
Partager