Developpez.com - Delphi
X

Choisissez d'abord la catégorieensuite la rubrique :

Nono40.developpez.com
Le petit coin du web de Nono40
SOURCES TESTS DELPHI WIN32 AUTOMATISMES DELPHI .NET QUICK-REPORT
Retour à l'accueil
54 - USER ET DOMAINE D'UN SESSION NT

PRÉSENTATION : Obtenir le User et le Domaine d'un session NT
ZIP : Téléchargez le zip APERÇUS :

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..1999Of Byte;
    InfoUser         : TToken_User    Absolute Buffer;
    InfoGroups       : TToken_Groups  Absolute Buffer;
    szAccountName    : Array[0.. 200Of Char;
    szDomainName     : Array[0.. 200Of 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 œuvre intellectuelle protégée par les droits d'auteur. 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'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Responsables bénévoles de la rubrique Delphi : Gilles Vasseur - Alcatîz -