次の方法で共有


IADsSecurityDescriptor インターフェイス (iads.h)

IADsSecurityDescriptor インターフェイスは、ADSI セキュリティ記述子オブジェクトのプロパティへのアクセスを提供します。

継承

IADsSecurityDescriptor インターフェイスは、IDispatch インターフェイスから継承されます。 IADsSecurityDescriptor には、次の種類のメンバーもあります。

メソッド

IADsSecurityDescriptor インターフェイスには、これらのメソッドがあります。

 
IADsSecurityDescriptor::CopySecurityDescriptor

IADsSecurityDescriptor::CopySecurityDescriptor メソッドは、オブジェクトに関するセキュリティ データを保持する ADSI セキュリティ記述子オブジェクトをコピーします。

注釈

このインターフェイスを使用して、アクセス制御を調べて Active Directory ディレクトリ サービス オブジェクトに変更します。 これを使用して、セキュリティ記述子のコピーを作成することもできます。 このインターフェイスを取得するには、 IADs.Get メソッドを使用して、オブジェクトの ntSecurityDescriptor 属性を取得します。 新しいセキュリティ記述子を作成してオブジェクトに設定する方法の詳細については、「新しいディレクトリ オブジェクトの セキュリティ記述子の作成 」および「 Null DACL」および「空の DACL」を参照してください。

多くの場合、セキュリティ記述子のすべての部分を変更することはできません。 たとえば、現在のユーザーがオブジェクトを完全に制御しているが、管理者ではなく、オブジェクトを所有していない場合、ユーザーは DACL を変更できますが、所有者を変更することはできません。 ntSecurityDescriptor が更新されると、エラーが発生します。 この問題を回避するために、 IADsObjectOptions インターフェイスを使用して、変更する必要があるセキュリティ記述子の特定の部分を指定できます。

次のコード例は、 IADsObjectOptions インターフェイスを使用して、セキュリティ記述子の特定の部分のみを変更する方法を示しています。

Const ADS_OPTION_SECURITY_MASK = 3
Const ADS_SECURITY_INFO_OWNER = 1
Const ADS_SECURITY_INFO_GROUP = 2
Const ADS_SECURITY_INFO_DACL = 4

Dim obj as IADs
Dim sd as IADsSecurityDescriptor
Dim oOptions as IADsObjectOptions

' Bind to the object.
Set obj = GetObject("LDAP://.....")

' Get the IADsSecurityDescriptor.
Set sd = obj.Get("ntSecurityDescriptor")

' Modify the DACL as required.

' Get the IADsObjectOptions for the object - not the IADsSecurityDescriptor.
Set oOptions = obj

' Set options so that only the DACL will be updated.
oOptions.SetOption ADS_OPTION_SECURITY_MASK, ADS_INFO_DACL

' Update the security descriptor.
obj.Put "ntSecurityDescriptor", sd
obj.SetInfo

次のコード例は、セキュリティ記述子のデータを表示する方法を示しています。

' Get the security descriptor.
Dim x As IADs
Dim sd As IADsSecurityDescriptor

On Error GoTo Cleanup
 
Set x = GetObject("LDAP://DC=Fabrikam,DC=com")
Set sd = x.Get("ntSecurityDescriptor")
Debug.Print sd.Control
Debug.Print sd.Group
Debug.Print sd.Owner
Debug.Print sd.Revision
 
Cleanup:
    If (Err.Number<>0) Then
        MsgBox("An error has occurred. " & Err.Number)
    End If
    Set x = Nothing
    Set sd = Nothing

次のコード例は、ディレクトリ オブジェクトのセキュリティ記述子からデータを表示する方法を示しています。

HRESULT DisplaySD(IADs *pObj)
{
    IADsSecurityDescriptor *pSD = NULL;
    BSTR bstr = NULL;
    long lVal = 0;    
    HRESULT hr = S_OK;
    VARIANT var;
    
    VariantInit(&var);

    if(pObj==NULL)
    {
        return E_FAIL;
    }
    
    hr = pObj->Get(CComBSTR("ntSecurityDescriptor"), &var);
    if(FAILED(hr)){goto Cleanup;}
    
    
    hr = V_DISPATCH(&var)->QueryInterface(IID_IADsSecurityDescriptor,(void**)&pSD);
    if(FAILED(hr)){goto Cleanup;}
    
   hr = pSD->get_Control(&lVal);
   printf("SD Control = %d\n",lVal);

   hr = pSD->get_Owner(&bstr);
   printf("SD Owner   = %S\n",bstr);
   SysFreeString(bstr);

   hr = pSD->get_Group(&bstr);
   printf("SD Group   = %S\n",bstr);
   SysFreeString(bstr);

   hr = pSD->get_Revision(&lVal);
   printf("SD Revision= %d\n",lVal);
        
Cleanup:
    VariantClear(&var);
    if(pSD) pSD->Release();
    return hr;
}

要件

要件
サポートされている最小のクライアント Windows Vista
サポートされている最小のサーバー Windows Server 2008
対象プラットフォーム Windows
ヘッダー iads.h

こちらもご覧ください

新しいディレクトリ オブジェクトのセキュリティ記述子の作成

IADsAccessControlEntry

IADsAccessControlList

IDispatch

Null DACL と空の DACL