Page 1 sur 1

ImpersonateLoggedOnUser

Publié : mar. 12/avr./2005 6:00
par Droopy
Bonjour,
Je cherche a exécuter mon programme en tant qu'administrateur
ceci afin de créer des groupes / Renommer le PC
le tout sans lancer de programmes externes

j'utilise la fonction ImpersonateLoggedOnUser mais malgré le fait
que dans dans mon programme je sois reconnu comme un autre utilisateur
Je n'ai pas ses droits ...

Code : Tout sélectionner

Username.s="toto" 
Domain.s="." 
Password.s="passe" 
Token.l 

Debug logonuser_(@Username,@Domain,@Password,2,0,@Token) 

Debug ImpersonateLoggedOnUser_(Token) 

RunProgram("notepad.exe","","") 

Publié : mar. 12/avr./2005 9:59
par Le Soldat Inconnu
ca me parait logique que Windows ne donne pas les droits d'admin à quelqu'un qui ne l'ai pas.

sinon, boujour la faille de sécurité

Publié : mar. 12/avr./2005 19:03
par Droopy
Il faut bien entendu connaitre un compte / mot de passe d'un administrateur

Le code suivant permet de lancer une appli en tant qu'un autre utilisateur

Code : Tout sélectionner

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
Je voudrais faire la même chose en changeant de compte utilisateur le thread associé à l'exe .

Publié : mar. 12/avr./2005 19:52
par Le Soldat Inconnu
ah ok ;)

ça peut être utile dans certain, par exemple pour une install :D

Publié : mar. 12/avr./2005 20:18
par Droopy
Après vérification Le 1er code fournit fonctionne correctement
Il permet de s'attribuer des droits admin ( si on connait le couple Compte/Pwd) et de par exemple renommer le pc / créer des utilisateurs

Exception faite pour le lancement d'une commande externe (exemple Notepad ) c'est dans ce cas les droits de l'utilisateur qui a démarré l'appli qui sont utilisés ( d'où mon 1er post )