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 :

Détecter la session administrateur


Sujet :

Delphi

  1. #1
    Membre régulier

    Profil pro
    Inscrit en
    Avril 2004
    Messages
    536
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 536
    Points : 121
    Points
    121
    Par défaut Détecter la session administrateur
    Bonjour à tous, et meilleurs voeux (il est encore temps)

    Quelle est la technique permettant à un programme de détecter s'il est appelé ou non en mode administrateur ?

    Exemple :



    Là, c'est sans doute écrit en C. Mais on doit pouvoir faire la même chose avec Delphi.

    Merci

  2. #2
    Membre expérimenté
    Avatar de retwas
    Homme Profil pro
    Développeur Java/Delphi
    Inscrit en
    Mars 2010
    Messages
    698
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Java/Delphi
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 698
    Points : 1 608
    Points
    1 608
    Billets dans le blog
    4
    Par défaut
    Dans l'API Windows il existe IsUserAnAdmin.

    Il y a aussi la solution de tester quelque chose que seul un admin peux faire, par exemple :
    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
    uses
      WinSvc;
     
    function IsAdmin(Host : string = '') : Boolean;
    var
      H: SC_HANDLE;
    begin
      if Win32Platform <> VER_PLATFORM_WIN32_NT then
        Result := True
      else begin
        H := OpenSCManager(PChar(Host), nil, SC_MANAGER_ALL_ACCESS);
        Result := H <> 0;
        if Result then
          CloseServiceHandle(H);
      end;
    end;
    Sinon dans mes anciennes version de Delphi il existait un manifest pour exécuter en tant qu'admin, sur ma starter je ne l'ai pas

  3. #3
    Membre régulier

    Profil pro
    Inscrit en
    Avril 2004
    Messages
    536
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 536
    Points : 121
    Points
    121
    Par défaut
    Merci, Retwas :hello:

    Je vais tester ça te je donne le retour

    Une API !! Je n'avais même pas pensé à ça...

    Résultats.
    J'ai activé le compte invité. Je lui ai fait exécuter l'EXE.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
      if IsUserAnAdmin then MessageDlg('UTILISATEUR : ADMINISTRATEUR', mtWarning, [mbOK], 0)
      Else MessageDlg('UTILISATEUR : NON ADMIN !', mtWarning, [mbOK], 0)
    Dans les USES : Winapi.ShlObj;

    Exécuté depuis mon profil, le prog me répond que je suis bien administrateur. Depuis le profil invité, il dit que non. Logique.

    MAIS... J'appelle le même prog avec clic droit "Exécuter en tant qu'administrateur, et voilà ce que ça donne :






    Qu'est-ce qui me dit que le prog lui-même sait qu'il est exécuté en mode administrateur ?

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 036
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 036
    Points : 40 941
    Points
    40 941
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    le résultat semble normal car c'est l'utilisateur qui est testé et non le rôle.
    en c# il y a isinrole voir ceci
    en suivant cette piste je suis tombé, sans trop de dégâts , sur ceci
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  5. #5
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 688
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 688
    Points : 13 117
    Points
    13 117
    Par défaut
    Citation Envoyé par bvsud Voir le message
    Exécuté depuis mon profil, le prog me répond que je suis bien administrateur.
    Il ne devrait pas sans élévation à moins que tu aies désactivé l'UAC.

    Citation Envoyé par bvsud Voir le message
    MAIS... J'appelle le même prog avec clic droit "Exécuter en tant qu'administrateur, et voilà ce que ça donne...
    La fonction échoue alors. Lorsque tu demandes l'élévation, l'app tourne dans le contexte de ce nouvel utilisateur (l'administrateur) et non plus dans celui de l'invité.

  6. #6
    Membre régulier

    Profil pro
    Inscrit en
    Avril 2004
    Messages
    536
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 536
    Points : 121
    Points
    121
    Par défaut
    Bonsoir.

    Dans mon profil, j'ai effectivement désactivé l'UAC. Lorsque j'appelle RepWin, sans clic droit "Excécuter en tant que...', j'ai effecitvement ceci :



    Donc, si j'ai bien suivi, un processus ne peut savoir qu'il s'exécute en mode administrateur qu'à travers la détection du niveau de privilège de l'utilisateur l'ayant lancé ? S'il est admin, alors le prog déduit qu'il s'exécute en mode administrateur ?

    Ce n'est pas plus compliqué que ça ? Ah...

  7. #7
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 688
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 688
    Points : 13 117
    Points
    13 117
    Par défaut
    Ce n'est pas (beaucoup) plus compliqué que cela mais un peu différent

    C'est le processus qui a des privilèges particuliers mais il les "hérite" de ceux alloués à l'utilisateur à son lancement. C'est le jeton (token) du processus qui est testé pour déterminer s'il en détient certains. IsUserAnAdmin n'est qu'une encapsulation de CheckTokenMembership et contrôle l'appartenance à un groupe en particulier : le groupe administrateurs. Le terme IsUserAnAdmin n'est peut-être pas très heureux, HasAdminPrivileges aurait sans doute été plus proche de ce que fait effectivement la fonction.

    Avec l'UAC activé, être déclaré administrateur n'est pas suffisant. L'OS impose une confirmation manuelle (quittancer la boîte de dialogue) pour effectivement activer ces privilèges. Sans cela il n'est qu'utilisateur standard. Une fois l'élévation acceptée, le processus est lancé dans le contexte de l'utilisateur authentifié qui s'avère être le même que l'utilisateur courant. C'est donc transparent.

    Lorsque la même demande est faite depuis un compte limité ou invité, c'est un autre utilisateur (un administrateur en général) qui demande l'élévation. Le processus est démarré dans le contexte de cet utilisateur-là (mais toujours dans la même session). Ce processus n'a aucune notion de qui est l'utilisateur original, GetUserName renvoie le nom du nouvel utilisateur.

    En complément (là ça devient plus compliqué), un administrateur a beaucoup de privilèges mais bon nombre sont désactivés, même après élévation. C'est à l'application de les activer en cas de besoin. RAM-0000 apporte quelques lumières sur le sujet.

Discussions similaires

  1. Débloquer une session Administrateur
    Par anouar dans le forum SQL
    Réponses: 2
    Dernier message: 17/10/2007, 21h17
  2. problème avec la session administrateur
    Par fofmata dans le forum Windows XP
    Réponses: 1
    Dernier message: 23/05/2007, 23h19
  3. Detecter session administrateur?
    Par kheldoun ahmed dans le forum Delphi
    Réponses: 5
    Dernier message: 09/05/2007, 10h24
  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