énumération ADS_SECURITY_INFO_ENUM (iads.h)
L’énumération ADS_SECURITY_INFO_ENUM spécifie les options disponibles pour examiner les données de sécurité d’un objet.
Syntax
typedef enum __MIDL___MIDL_itf_ads_0001_0077_0002 {
ADS_SECURITY_INFO_OWNER = 0x1,
ADS_SECURITY_INFO_GROUP = 0x2,
ADS_SECURITY_INFO_DACL = 0x4,
ADS_SECURITY_INFO_SACL = 0x8
} ADS_SECURITY_INFO_ENUM;
Constantes
ADS_SECURITY_INFO_OWNER Valeur : 0x1 Lit ou définit les données du propriétaire. |
ADS_SECURITY_INFO_GROUP Valeur : 0x2 Lit ou définit les données de groupe. |
ADS_SECURITY_INFO_DACL Valeur : 0x4 Lit ou définit les données de liste de contrôle d’accès discrétionnaires. |
ADS_SECURITY_INFO_SACL Valeur : 0x8 Lit ou définit les données de liste de contrôle d’accès système. |
Remarques
Les options définies dans cette énumération sont des masques de bits. Plusieurs options peuvent être définies à l’aide d’opérations appropriées au niveau du bit.
Pour lire les données de sécurité d’un objet, utilisez l’interface IADsObjectOptions , en fournissant les options de données de sécurité répertoriées dans cette énumération.
La liste suivante répertorie les combinaisons d’indicateurs courantes et leur utilisation.
Combinaison d’indicateurs | Description |
---|---|
ADS_SECURITY_INFO_OWNER, ADS_SECURITY_INFO_GROUP et ADS_SECURITY_INFO_DACL | Permettre aux utilisateurs de lire les données de sécurité du propriétaire, du groupe ou du dacl d’un objet. Il s’agit du paramètre par défaut lors de la création d’un objet. |
ADS_SECURITY_INFO_OWNER, ADS_SECURITY_INFO_GROUP, ADS_SECURITY_INFO_DACL et ADS_SECURITY_INFO_SACL | Permettre aux utilisateurs de lire la liste SACL. L’indicateur ADS_SECURITY_INFO_SACL ne peut pas être utilisé seul. |
Actuellement, ces options sont disponibles uniquement pour Active Directory.
Étant donné que Visual Basic Scripting Edition (VBScript) ne peut pas lire les données d’une bibliothèque de types, une application doit utiliser les constantes numériques appropriées, au lieu des constantes symboliques, pour définir les indicateurs appropriés. Pour utiliser les constantes symboliques comme bonne pratique de programmation, écrivez des déclarations explicites de ces constantes, comme cela est fait ici.
Exemples
L’exemple de code suivant affiche le nombre d’entrées de contrôle d’accès dans une liste SACL.
Const ADS_SECURITY_INFO_OWNER = &H1
Const ADS_SECURITY_INFO_GROUP = &H2
Const ADS_SECURITY_INFO_DACL = &H4
Const ADS_SECURITY_INFO_SACL = &H8
Const ADS_OPTION_SECURITY_MASK = 3
Dim x As IADs
Dim dso As IADsOpenDSObject
Dim adsPath As String
Dim sd As IADsSecurityDescriptor
Dim sacl As IADsAccessControlList
Dim objOps As IADsObjectOptions
Dim opt As Variant
Dim canReadSacl As Variant
Set dso = GetObject("LDAP:")
adsPath = "LDAP://ArcSrv1/dc=Sales,dc=Fabrikam,dc=com"
Set x = dso.OpenDSObject(adsPath, vbNullString, vbNullString, 1)
Set objOps = x
canReadSacl = ADS_SECURITY_INFO_OWNER _
Or ADS_SECURITY_INFO_GROUP _
Or ADS_SECURITY_INFO_DACL _
Or ADS_SECURITY_INFO_SACL
opt = objOps.GetOption(ADS_OPTION_SECURITY_MASK)
If opt <> canReadSacl Then
objOps.SetOption ADS_OPTION_SECURITY_MASK, canReadSacl
End If
Set sd = x.Get("ntSecurityDescriptor")
Set sacl = sd.SystemAcl
Debug.Print "sacl(aceCount)= " & sacl.AceCount
L’exemple de code suivant affiche le nombre d’entrées de contrôle d’accès dans une liste de contrôle d’accès système. Par souci de concision, la vérification des erreurs est omise.
void TestObjectOptions()
{
long lCanReadSACL = ADS_SECURITY_INFO_OWNER |
ADS_SECURITY_INFO_GROUP |
ADS_SECURITY_INFO_DACL |
ADS_SECURITY_INFO_SACL;
HRESULT hr = S_OK;
CComPtr<IADs> spObj;
hr = ADsOpenObject(L"LDAP://arcSrv1/dc=Sales,dc=Fabrikam,dc=com",
NULL,
NULL,
ADS_SECURE_AUTHENTICATION,
IID_IADs,
(void**)&spObj);
if(S_OK != hr)
{
return;
}
CComPtr<IADsObjectOptions> spObjOps;
hr = spObj->QueryInterface(IID_IADsObjectOptions, (void**)&spObjOps);
if(S_OK != hr)
{
return;
}
CComVariant svar;
hr = spObjOps->GetOption(ADS_OPTION_SECURITY_MASK, &svar);
if(S_OK != hr)
{
return;
}
if(V_I4(&svar) != lCanReadSACL)
{
svar = lCanReadSACL;
hr = spObjOps->SetOption(ADS_OPTION_SECURITY_MASK, svar);
}
hr = spObj->Get(CComBSTR("ntSecurityDescriptor"), &svar);
if(S_OK != hr)
{
return;
}
CComPtr<IADsSecurityDescriptor> spSd;
hr = V_DISPATCH(&svar)->QueryInterface(IID_IADsSecurityDescriptor,
(void**)&spSd);
if(S_OK != hr)
{
return;
}
CComPtr<IDispatch> spDisp;
hr = spSd->get_SystemAcl(&spDisp);
if(S_OK != hr)
{
return;
}
CComPtr<IADsAccessControlList> spSacl;
hr = spDisp->QueryInterface(IID_IADsAccessControlList,
(void**)&spSacl);
if(S_OK != hr)
{
return;
}
LONG lOptions;
hr = spSacl->get_AceCount(&lOptions);
if(S_OK != hr)
{
return;
}
_tprintf(TEXT("Number of ACE's in the SACL is %d\n"), lOptions);
}
Configuration requise
Condition requise | Valeur |
---|---|
Client minimal pris en charge | Windows Vista |
Serveur minimal pris en charge | Windows Server 2008 |
En-tête | iads.h |