Admin Fondateur
Nombre de messages : 197 Age : 40 Localisation : Tlemcen ( Algérie ) Date d'inscription : 04/12/2006
| Sujet: Comment lancer un programme sous un autre contexte de securi Ven 12 Jan - 6:25 | |
| Il est très fréquent d'avoir à lancer une application en tant qu'un autre utilisateur. Généralement , on utilise (pour les versions de Windows supérieures à Windows ME) le menu contextuel permettant "d'exécuter en tant que...".
Nous allons ici présenter une solution qui permet de faire de même mais cette fois directement à partir de Delphi.
Avant tout, il faut définir les constantes suivantes : - Code:
-
const LOGON_WITH_PROFILE = 1; LOGON_NETCREDENTIALS_ONLY = 2; - Code:
-
procedure runas(sUser, sDomain, sPassword : WideString); var wUsername, wDomain, wPassword, wApplicationName: WideString; pwUsername, pwDomain, pwPassword, pwApplicationName: PWideChar; StartupInfo: TStartupInfo; ProcessInfo: TProcessInformation; begin wUsername := sUser ; wDomain := sDomain; wPassword := Spassword; wApplicationName := sExecutable ; pwUsername := Addr(wUsername[1]); pwDomain := Addr(wDomain[1]); pwPassword := Addr(wPassword[1]); pwApplicationName := Addr(wApplicationName[1]);
FillChar(StartupInfo, SizeOf(StartupInfo), 0); StartupInfo.cb := SizeOf(StartupInfo); try if not CreateProcessWithLogon(pwUsername,pwDomain,pwPassword,LOGON_NETCREDENTIALS_ONLY, nil,pwApplicationName,CREATE_DEFAULT_ERROR_MODE, nil,nil,StartupInfo,ProcessInfo) then RaiseLastOSError; //En cas d'erreur, donne des détails sur l'erreur end; La fonction CreateProcessWithLogon est définie dans advapi32.dll. Il faudra donc, pour l'utiliser, la déclarer par : - Code:
-
function CreateProcessWithLogon; external 'advapi32.dll' name 'CreateProcessWithLogonW'; | |
|