| 12
 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
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 
 | Option Explicit
 
wscript.echo "Admin : " & IsAdmin()
 
Function IsAdmin()
    'On Error Resume Next
 
    'Résultat à déterminer
    IsAdmin = False
 
    'Les ruches utilisées
    Const HKEY_CURRENT_USER = &H80000001
    Const HKEY_LOCAL_MACHINE = &H80000002
    Const HKEY_USERS = &H80000003 
 
    'Identifiant utilisateur (User ID)
    Dim strRegKey, strRegValue, strCurrentUserID, strUserID
    strRegKey = "Identities"
    strRegValue = "Default User ID"
 
    'SID utilisateur
    Dim strSID, arrSID
 
    'Groupes auxquels l'utilisateur appartient
    Dim strRegGroupPolicy, strRegGroupMembership, strGroup, arrGroup, strGroupSID
    strRegGroupPolicy = "SOFTWARE\Microsoft\Windows\CurrentVersion\Group Policy\"
    strRegGroupMembership = "\GroupMembership"
 
    'Accès au registre
    Dim objRegistry : Set objRegistry=GetObject("winmgmts:root\default:StdRegProv")
 
    'Récupère l'identifiant (User ID) de l'utilisateur connecté
    objRegistry.GetStringValue HKEY_CURRENT_USER, strRegKey, strRegValue, strCurrentUserID
    'pour le comparer aux comptes enregistrés et ainsi déterminer le SID de l'utilisateur
    objRegistry.EnumKey HKEY_USERS, "", arrSID
 
    'Parcours des comptes enregistrés
    For Each strSID In arrSID
 
        'Omission des comptes systèmes ainsi que des comptes suffixés par _Classes
        If strSID <> ".DEFAULT" And strSID <> "S-1-5-18" And _
           strSID <> "S-1-5-19" And strSID <> "S-1-5-20" And _
           Right(strSID, 8) <> "_Classes" Then
 
              'Récupére le UserID du compte qui est peut être celui de l'utilisateur connecté
              objRegistry.GetStringValue HKEY_USERS, strSID & "\" & strRegKey, strRegValue, strUserID
 
              'Vérifie si les UserID correspondent 
              'et donc si le SID du compte parcouru est bien celui de l'utilisateur connecté
              If strCurrentUserID = strUserID Then
 
                  'Liste les SID des groupes auquels appartient l'utilisateur
                  objRegistry.EnumValues HKEY_LOCAL_MACHINE, strRegGroupPolicy & strSID & strRegGroupMembership, arrGroup
                  For Each strGroup In arrGroup
 
                      'Regarde parmis les SID si le groupe Administrateurs (S-1-5-32-544) y figure
                      objRegistry.GetStringValue HKEY_LOCAL_MACHINE, strRegGroupPolicy & strSID & strRegGroupMembership, strGroup, strGroupSID
                      If strGroupSID = "S-1-5-32-544" Then
                          'Si oui l'utilisateur peut être considéré comme administrateur 
                          IsAdmin = True
                          Exit Function
                      End If
                  Next
 
                  'Quitte, Admin ou pas, puisque le compte de l'utilisateur a bien été vérifié
                  Exit Function
              End If           
        End If
    Next 
End Function | 
Partager