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

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 )