Petite application pour montrer les API "InitiateSystemShutdown" et "AbortSystemShutdown"
Permet d'eteindre ou redémarrer un PC à distance, en affichant un message au client et ceci avec un delai d'attente en secondes.
PS : Ce programme n'est aucunement un cours de piratage ou un truc dans le genre pour faire chier le monde, c'est au contraire une API assez interessant pour faire des applications d'administration.
De toute façon :
- Son etendu est limité à un reseau local
- Et il faut avoir des droits sur la machine distante pour la redemarrer ou l'arretter, (evidemment).
Source / Exemple :
{
- WinShut v1.2 *
- Extinction de PC à distance *
- LEVEUGLE Damien (c) 2005 *
- elguevel@free.fr *
}
unit shutdown;
interface
uses Windows, StdCtrls;
procedure Eteindre( Machine : string; Texte : string; Force : Boolean; Reboot : Boolean; CountDown : Integer );
procedure Annuler ( Machine : string );
procedure AjustePrivileges( Machine : string );
implementation
const
SE_SHUTDOWN_NAME = 'SeShutdownPrivilege';
var
hToken: THandle;
{ Lance l'extinction de la machine }
procedure Eteindre( Machine : string; Texte : string; Force : Boolean; Reboot : Boolean; CountDown : Integer );
begin
try
AjustePrivileges( Machine );
finally
InitiateSystemShutdown( PChar( Machine ), PChar( Texte ), CountDown, Force, Reboot );
CloseHandle( hToken );
end;
end;
{ Annule l'extinction de la machine }
procedure Annuler( Machine: string );
begin
try
AjustePrivileges( Machine );
finally
AbortSystemShutdown( PChar( Machine ) );
CloseHandle( hToken );
end;
end;
{ Ajuste les privilège de la machine pour pouvoir l'eteindre }
{
- ATTENTION : Cette procedure est necessaire, mais ne vous permet
pas de vous passer de droits suffisants sur le reseau
pour pouvoir eteindre la machine distante.
}
procedure AjustePrivileges( Machine : string );
var
hProc : THandle;
TP : TTokenPrivileges;
PrevToken : TTokenPrivileges;
PSsize : DWORD;
begin
hProc := GetCurrentProcess;
OpenProcessToken( hProc, TOKEN_ADJUST_PRIVILEGES + TOKEN_QUERY, hToken );
TP.PrivilegeCount := 1;
LookupPrivilegeValue( PChar(Machine), SE_SHUTDOWN_NAME, TP.Privileges[0].Luid );
TP.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges( hToken, False, TP, SizeOf(TP), PrevToken, PSsize );
end;
end.
Conclusion :
Si celà ne marche pas (a part sur le localhost) c'est que vous n'avez pas les droits suffisants pour faire une tel manipulation sur le reseau, soit certains services ne sont pas démarré.
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.