Salut tt le monde,
JE veux savoir, est-ce-qu'il y a une possibilité de détecter le type de session (administrateur ou utilisateur) ou j'execute mon programme.
merci a l'avance?
Salut tt le monde,
JE veux savoir, est-ce-qu'il y a une possibilité de détecter le type de session (administrateur ou utilisateur) ou j'execute mon programme.
merci a l'avance?
merci pour ta reponse,Envoyé par zemeilleurofgreg
j'avais essayé cette fonction, et voilà mon premier code
lors de l'execution de cette derniere, j'ai un code d'erreur 1327 alors que je suis en mode administrateur.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 var Token : THandle; begin if LogonUser('aze', 'CD', nil, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_WINNT50, Token) then showmessage('Authentification réussie') else showmessage('Authentification échouée' + #13 + 'Code d''erreur: ' +IntToStr(GetLastError)); end;
il y'a une explication à ça.
Bonjour, tu peux utiliser la fonction suivante :
Je l'utilise souvent et cela fonctionne très bien.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37 function CurrentUserIsAdmin:boolean; var hAccessToken : tHandle; ptgGroups : Ptokengroups; dwInfoBufferSize : dWord; psIdAdministrators : PSid; x : integer; bSuccess : BOOL; begin Result := false; bSuccess := OpenThreadToken(GetCurrentThread,TOKEN_QUERY,true,hAccessToken ); if not bSuccess then begin if GetLastError = ERROR_NO_TOKEN then bSuccess := OpenProcessToken(GetCurrentProcess,TOKEN_QUERY,hAccessToken ); end; if bSuccess then begin GetMem(ptgGroups,1024); bSuccess := GetTokenInformation(hAccessToken,TokenGroups,ptgGroups,1024,dwInfoBufferSize ); closehandle(hAccessToken); if bSuccess then begin AllocateAndInitializeSid(SECURITY_NT_AUTHORITY,2,SECURITY_BUILTIN_DOMAIN_RID,DOMAIN_ALIAS_RID_ADMINS,0,0,0,0,0,0,psIdAdministrators ); {$R-} for x :=0 to ptgGroups.GroupCount -1 do if EqualSid(psIdAdministrators,ptgGroups.groups[x].Sid ) then begin Result := true; Break; end; {$R+} FreeSid(psIdAdministrators ); end; FreeMem(ptgGroups); end; end;
Pour que cela fonctionne il faut que tu ajoutes windows dans les uses..
Quand je compile, la constante SECURITY_NT_AUTHORITY n'est pas définie. Faut ajouter quelle bibliothèque (autre que windows) ?Envoyé par MedGIR
L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. :bug: ___ "http://club.developpez.com/regles/#LIII-A"Écrivez dans un français correct !!
C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.3 Entreprise - Visual studio 2022
OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.7)
Excuse-moi, j'ai oublié de te dire qu'il faut créer une constante au niveau de l'interface du code comme ceci:
Code : Sélectionner tout - Visualiser dans une fenêtre à part const SECURITY_NT_AUTHORITY : TSIDIdentifierAuthority = (Value:(0,0,0,0,0,5));
Partager