Changer le compte qui exécute le programme

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
gansta93
Messages : 1448
Inscription : jeu. 26/févr./2004 11:17
Localisation : Le Village
Contact :

Changer le compte qui exécute le programme

Message par gansta93 »

Bonjour,

Comment puis-je faire que le programme exécuté ait les droits administrateur ?

Merci d'avance.
Et après si j'utilise RunProgram() le programme lancé aura-t-il les droits administrateurs ?
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Message par djes »

Par définition, un programme hérite des droits de celui qui l'exécute. Encore heureux, sinon y'aurait beaucoup de virus sur les serveurs!
Heis Spiter
Messages : 1092
Inscription : mer. 28/janv./2004 16:22
Localisation : 76
Contact :

Message par Heis Spiter »

Tu peux essayer de voir avec la fonction Windows "Executer en tant que".
Heis Spiter, webmaster du site http://www.heisspiter.net
Développeur principal et administrateur du projet Bird Chat
Parti courir au bonheur du dév. public et GPL :D
Avatar de l’utilisateur
Droopy
Messages : 1151
Inscription : lun. 19/juil./2004 22:31

Message par Droopy »

Tu peux utiliser cette procédure

Code : Tout sélectionner

; Code Web modifié ( n'exécutait pas d'argument de l'exe )
; 16/02/05
; PB 3.92
; Execute Runas avec paramètre + Password !!
; renvoie 0 si : commande inexistante / username ou Password incorrect
; Renvoie 1 si tout s'est bien passé

ProcedureDLL Runas(Username.s,Domain.s,Password.s,CommandLine.s,Argument.s)
  FlagErreur=1
  
  *lpUserName = AllocateMemory(1000)
  *lpDomainName = AllocateMemory(1000)
  *lpPassword = AllocateMemory(1000)
  *lpApplication = AllocateMemory(1000)
  *lpCommandLine = AllocateMemory(1000)
  lpProcessInfo.PROCESS_INFORMATION
  lpStartUpInfo.STARTUPINFO
  ;convert ansi strings to unicode
  
  ; UserName
  MultiByteToWideChar_(#CP_ACP, 0, Username, -1, *lpUserName, 1000)
  
  ; DomainOrLocalMachine
  MultiByteToWideChar_(#CP_ACP, 0, Domain, -1, *lpDomainName, 1000)
  
  ; Password
  MultiByteToWideChar_(#CP_ACP, 0, Password, -1, *lpPassword, 1000)
  
  ; Application a lancer
  MultiByteToWideChar_(#CP_ACP, 0, CommandLine, -1, *lpApplication, 1000)
  
  ; Arguments 
  If Argument<>"" And Left(Argument,1)<>" " : Argument=" "+Argument:EndIf ; ajout espace
  MultiByteToWideChar_(#CP_ACP, 0, Argument, -1, *lpCommandLine, 1000)
  
  If OpenLibrary(0, "ADVAPI32.DLL")
    *F = IsFunction(0, "CreateProcessWithLogonW")
    If *F
      If CallFunctionFast(*F, *lpUserName, *lpDomainName, *lpPassword, 0, *lpApplication,*lpCommandLine,0,0,0,@lpStartUpInfo,@lpProcessInfo) = 0
        FlagErreur=0
      EndIf
    Else
      FlagErreur=0
    EndIf
    CloseLibrary(0)
  EndIf
  
  ProcedureReturn FlagErreur
    
EndProcedure

; test
;If Runas("utilisateur",".","pasword","c:\windows\system32\cmd.exe","/k dir c:\ /W")=0
;  MessageRequester("Runas","Erreur")
;EndIf
et Utiliser ce code pour savoir si le couple utilisateur/compte est présent et valide

Code : Tout sélectionner

; Code Web modifié ( pour en faire une Librairie )
; 16/02/05
; PB 3.92
; Renvoie 1 (vrai) si utilisateur / password existe & correct
; renvoie 0 (erreur) si password vide ou compte / pwd incorrecte

ProcedureDLL UtilisateurExiste(NomUtilisateur.s,MotdePasse.s) 
  ret.l 
  username.s=NomUtilisateur 
  domain.s="."
  password.s=MotdePasse
  token.l 
  Result=LogonUser_(@username,@domain,@password,#LOGON32_LOGON_INTERACTIVE,#LOGON32_PROVIDER_DEFAULT,@token) 
  Result=ImpersonateLoggedOnUser_(token) 
  If Result 
    ret=1 
  Else 
    ret=0 
  EndIf 
  ;  ret=0 
  
  reverttoself_()
  
  ProcedureReturn ret 
EndProcedure  

;test
;Debug UtilisateurExiste("Utilisateur","motdepasse")
gansta93
Messages : 1448
Inscription : jeu. 26/févr./2004 11:17
Localisation : Le Village
Contact :

Message par gansta93 »

Salut,

Merci Droopy, c'est exactement ce qu'il me fallait ! :-D
Répondre