IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Delphi Discussion :

Detecter session administrateur?


Sujet :

Delphi

  1. #1
    Membre confirmé
    Inscrit en
    Mars 2007
    Messages
    78
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 78
    Par défaut Detecter session administrateur?
    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?

  2. #2
    Membre éclairé Avatar de zemeilleurofgreg
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    515
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 515
    Par défaut
    Salut,

    regarde du côté de "LogonUser".

  3. #3
    Membre confirmé
    Inscrit en
    Mars 2007
    Messages
    78
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 78
    Par défaut
    Citation Envoyé par zemeilleurofgreg
    Salut,

    regarde du côté de "LogonUser".
    merci pour ta reponse,

    j'avais essayé cette fonction, et voilà mon premier code
    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;
    lors de l'execution de cette derniere, j'ai un code d'erreur 1327 alors que je suis en mode administrateur.
    il y'a une explication à ça.

  4. #4
    Membre éprouvé
    Inscrit en
    Août 2002
    Messages
    144
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Août 2002
    Messages : 144
    Par défaut
    Bonjour, tu peux utiliser la fonction suivante :

    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;
    Je l'utilise souvent et cela fonctionne très bien.

    Pour que cela fonctionne il faut que tu ajoutes windows dans les uses..

  5. #5
    Membre Expert
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 703
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 703
    Par défaut
    Citation Envoyé par MedGIR
    Bonjour, tu peux utiliser la fonction suivante :

    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;
    Je l'utilise souvent et cela fonctionne très bien.

    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) ?
    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)

  6. #6
    Membre éprouvé
    Inscrit en
    Août 2002
    Messages
    144
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Août 2002
    Messages : 144
    Par défaut Oups
    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));

Discussions similaires

  1. Réponses: 3
    Dernier message: 14/04/2009, 14h42
  2. Débloquer une session Administrateur
    Par anouar dans le forum SQL
    Réponses: 2
    Dernier message: 17/10/2007, 21h17
  3. problème avec la session administrateur
    Par fofmata dans le forum Windows XP
    Réponses: 1
    Dernier message: 23/05/2007, 23h19
  4. bloquer internet session administrateur
    Par tonelli dans le forum Sécurité
    Réponses: 10
    Dernier message: 06/10/2006, 12h37
  5. Wamp session administrateur-utilisateur
    Par marco1320 dans le forum Apache
    Réponses: 2
    Dernier message: 30/04/2006, 00h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo