 |
|
 |
|
 |
54 - USER ET DOMAINE D'UN SESSION NT
|
|
|
|
PRÉSENTATION :
Obtenir le User et le Domaine d'un session NT
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
//
Interface
Uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
Type
TForm1 = Class(TForm)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
ListBox1: TListBox;
Procedure FormShow(Sender: TObject);
Private
{ Déclarations privées }
Public
{ Déclarations publiques }
End;
Var
Form1: TForm1;
Implementation
{$R *.dfm}
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
If Not 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 );
If Not 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
If Not 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
Then Begin
If Not LookupAccountSid(Nil, InfoGroups.Groups[i].Sid, szAccountName,
dwAccountSize,szDomainName, dwDomainSize, peUse)
Then RaiseLastOSError;
ListBox1.Items.Add(szAccountName);
End;
End;
End;
end.
|
| |
 |
|
 |
Les sources présentées sur cette page sont libres de droits,
et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright ©
2003 Bruno Guérangé. Aucune reproduction,
même partielle, ne peut être faite de ce site et de l'ensemble de son contenu :
textes, documents, images, etc sans l'autorisation expresse de l'auteur.
Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E
de dommages et intérêts.
Cette page est déposée à la
SACD.
|