ADS_SECURITY_INFO_ENUM enumeração (iads.h)
A enumeração ADS_SECURITY_INFO_ENUM especifica as opções disponíveis para examinar os dados de segurança de um objeto.
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 Valor: 0x1 Lê ou define os dados do proprietário. |
ADS_SECURITY_INFO_GROUP Valor: 0x2 Lê ou define os dados do grupo. |
ADS_SECURITY_INFO_DACL Valor: 0x4 Lê ou define os dados da lista de controle de acesso discricionário. |
ADS_SECURITY_INFO_SACL Valor: 0x8 Lê ou define os dados da lista de controle de acesso do sistema. |
Comentários
As opções definidas nesta enumeração são máscaras de bits. Mais de uma opção pode ser definida usando operações bit a bit apropriadas.
Para ler os dados de segurança de um objeto, use a interface IADsObjectOptions , fornecendo as opções de dados de segurança listadas nesta enumeração.
A lista a seguir lista combinações de sinalizadores comuns e seu uso.
Combinação de sinalizadores | Descrição |
---|---|
ADS_SECURITY_INFO_OWNER, ADS_SECURITY_INFO_GROUP e ADS_SECURITY_INFO_DACL | Permitir que os usuários leiam os dados de segurança do proprietário, grupo ou DACL de um objeto. Essa é a configuração padrão quando um objeto é criado. |
ADS_SECURITY_INFO_OWNER, ADS_SECURITY_INFO_GROUP, ADS_SECURITY_INFO_DACL e ADS_SECURITY_INFO_SACL | Permitir que os usuários leiam a SACL. O sinalizador ADS_SECURITY_INFO_SACL não pode ser usado por si só. |
Atualmente, essas opções estão disponíveis apenas para o Active Directory.
Como o Visual Basic Scripting Edition (VBScript) não pode ler dados de uma biblioteca de tipos, um aplicativo deve usar as constantes numéricas apropriadas, em vez das constantes simbólicas, para definir os sinalizadores apropriados. Para usar as constantes simbólicas como uma boa prática de programação, escreva declarações explícitas dessas constantes, conforme feito aqui.
Exemplos
O exemplo de código a seguir exibe o número de entradas de controle de acesso em uma 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
O exemplo de código a seguir exibe o número de entradas de controle de acesso em uma ACL do sistema. Para resumir, a verificação de erros é omitida.
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);
}
Requisitos
Requisito | Valor |
---|---|
Cliente mínimo com suporte | Windows Vista |
Servidor mínimo com suporte | Windows Server 2008 |
Cabeçalho | iads.h |