ADS_SECURITY_INFO_ENUM列挙 (iads.h)

ADS_SECURITY_INFO_ENUM列挙は、オブジェクトのセキュリティ データを調べるための使用可能なオプションを指定します。

構文

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;

定数

 
ADS_SECURITY_INFO_OWNER
値: 0x1
所有者データを読み取るか設定します。
ADS_SECURITY_INFO_GROUP
値: 0x2
グループ データを読み取るか設定します。
ADS_SECURITY_INFO_DACL
値: 0x4
随意アクセス制御リスト データを読み取りまたは設定します。
ADS_SECURITY_INFO_SACL
値: 0x8
システム アクセス制御リスト データを読み取りまたは設定します。

注釈

この列挙で定義されているオプションはビット マスクです。 適切なビット演算を使用して、複数のオプションを設定できます。

オブジェクトのセキュリティ データを読み取る場合は、 IADsObjectOptions インターフェイスを使用して、この列挙に記載されているセキュリティ データ オプションを指定します。

次の一覧に、一般的なフラグの組み合わせとその使用方法を示します。

フラグの組み合わせ 説明
ADS_SECURITY_INFO_OWNERADS_SECURITY_INFO_GROUPおよびADS_SECURITY_INFO_DACL ユーザーがオブジェクトの所有者、グループ、または DACL のセキュリティ データを読み取れる。 これは、オブジェクトの作成時の既定の設定です。
ADS_SECURITY_INFO_OWNERADS_SECURITY_INFO_GROUPADS_SECURITY_INFO_DACLADS_SECURITY_INFO_SACL ユーザーが SACL を読み取えるようにします。 ADS_SECURITY_INFO_SACL フラグは単独では使用できません。
 

現在、このようなオプションは Active Directory でのみ使用できます。

Visual Basic Scripting Edition (VBScript) はタイプ ライブラリからデータを読み取ることができないため、アプリケーションでは、シンボリック定数ではなく適切な数値定数を使用して適切なフラグを設定する必要があります。 シンボリック定数を適切なプログラミングプラクティスとして使用するには、ここで行われるように、このような定数の明示的な宣言を記述します。

次のコード例では、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

次のコード例では、システム ACL 内のアクセス制御エントリの数を表示します。 簡潔にするために、エラー チェックは省略されます。

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);
}

要件

要件
サポートされている最小のクライアント Windows Vista
サポートされている最小のサーバー Windows Server 2008
Header iads.h

こちらもご覧ください

ADSI 列挙

IADsObjectOptions

IADsObjectOptions::GetOption

IADsObjectOptions::SetOption