NOTES :
Ce programme donne en plus la liste des groupes auxquels l'utilisateur appartient.
Ces informations sont celles enregistrées dans le profil local.
Bien sur, comme c'est des informations sur une session NT, ce programme ne fonctionne qu'avec Window NT, Windows 2000 et Windows Xp
CODE :
Unit Unit1; // // Sujet : Nom de User et de domaine pour une session NT // ne fonctionne que sous Windows NT, Windows 2000 et Windows XP // // Par Nono40 : http://nono40.developpez.com http://nono40.fr.st // mailTo:nono40@fr.st // // Le 30/04/2003 //
Type // Structure utilisée pour le retour d'informations sur l'utilisateur
TToken_User=Record
User : SID_AND_ATTRIBUTES; End; // Structure utilisée pour le retour d'informations sur les groupes // auxquels l'utilisateur appartient
TToken_Groups=Record
GroupCount : DWord;
Groups : Array[0..99]Of SID_AND_ATTRIBUTES; End;
Procedure TForm1.FormShow(Sender: TObject); Var hAccessToken : THandle;
Buffer : Array[0..1999] Of Byte;
InfoUser : TToken_User Absolute Buffer;
InfoGroups : TToken_Groups Absolute Buffer;
szAccountName : Array[0.. 200] Of Char;
szDomainName : Array[0.. 200] Of Char;
dwInfoBufferSize : DWord;
dwAccountSize : Cardinal;
dwDomainSize : Cardinal;
peUse : Cardinal;
i : Integer; Begin // Demande d'un handle sur la session en cours.
OpenProcessToken(GetCurrentProcess,TOKEN_READ,hAccessToken);
// On commence par demander le USER et DOMAIN // Ils sont retournés en tant que pointeur SID IfNot GetTokenInformation(hAccessToken,TokenUser,@Buffer,SizeOf(Buffer),dwInfoBufferSize) Then RaiseLastOSError; // Le décodage des SID ne peut être direct // Il faut toujours passer par une fonction
dwAccountSize := SizeOf(szAccountName);
dwDomainSize := SizeOf(szDomainName ); IfNot LookupAccountSid(Nil, InfoUser.User.Sid, szAccountName,
dwAccountSize,szDomainName, dwDomainSize, peUse) Then RaiseLastOSError;
Label3.Caption := szAccountName;
Label4.Caption := szDomainName;
ListBox1.Clear; // On demande ensuite la liste des groupes de l'utilisateur // Ils sont retournés en tant que pointeur SID IfNot GetTokenInformation(hAccessToken,TokenGroups,@Buffer,SizeOf(Buffer),dwInfoBufferSize) Then RaiseLastOSError; For i:=0 To InfoGroups.GroupCount-1 Do Begin // Le décodage des SID ne peut être direct // Il faut toujours passer par une fonction
dwAccountSize := SizeOf(szAccountName);
dwDomainSize := SizeOf(szDomainName ); If (InfoGroups.Groups[i].Attributes And $FFFF0000)=0 ThenBegin IfNot LookupAccountSid(Nil, InfoGroups.Groups[i].Sid, szAccountName,
dwAccountSize,szDomainName, dwDomainSize, peUse) Then RaiseLastOSError;
ListBox1.Items.Add(szAccountName); End; End; End;