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_OWNER、 ADS_SECURITY_INFO_GROUP、 およびADS_SECURITY_INFO_DACL | ユーザーがオブジェクトの所有者、グループ、または DACL のセキュリティ データを読み取れる。 これは、オブジェクトの作成時の既定の設定です。 |
ADS_SECURITY_INFO_OWNER、 ADS_SECURITY_INFO_GROUP、 ADS_SECURITY_INFO_DACL、 ADS_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 |