ImpersonateLoggedOnUser

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Droopy
Messages : 1151
Inscription : lun. 19/juil./2004 22:31

ImpersonateLoggedOnUser

Message 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","","") 
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message 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é
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Avatar de l’utilisateur
Droopy
Messages : 1151
Inscription : lun. 19/juil./2004 22:31

Message 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 .
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

ah ok ;)

ça peut être utile dans certain, par exemple pour une install :D
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Avatar de l’utilisateur
Droopy
Messages : 1151
Inscription : lun. 19/juil./2004 22:31

Message 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 )
Répondre