次の方法で共有


オブジェクトに対するアクセス権の設定

ADSI COM オブジェクト IADsSecurityDescriptor (セキュリティ記述子)、IADsAccessControlList (DACL および SACL)、および IADsAccessControlEntry (ACE) を使用して ACE を ACL に追加する場合は、プロパティ キャッシュ内の指定されたオブジェクトの nTSecurityDescriptor プロパティに変更を加えます。 つまり、更新されたセキュリティ記述子をプロパティ キャッシュからディレクトリに書き込むには、新しい ACE と IADs.SetInfo メソッドを含むオブジェクトの put メソッドを呼び出す必要があります。

詳細と、Active Directory ドメイン Services のオブジェクトに ACE を設定するコード例については、「ディレクトリ オブジェクトに ACE を設定するためのコード例」を参照してください

次の一般的なプロセスを使用して、アクセス権の ACE を作成し、その ACE をオブジェクトの DACL に設定します。

  1. オブジェクトへの IADs インターフェイス ポインターを取得します。

  2. オブジェクトのセキュリティ記述子を 取得するには、IADs.Get メソッドを使用します。 セキュリティ記述子を含むプロパティの名前は nTSecurityDescriptor です。 このプロパティは、IDispatch ポインターを含む VARIANT として返されます (vt メンバーはVT_DISPATCH)。 その IDispatch ポインターで QueryInterface を呼び出して IADsSecurityDescriptor インターフェイスを取得し、そのインターフェイスのメソッドを使用してセキュリティ記述子の ACL にアクセスします。

  3. DACL を取得するには、 IADsSecurityDescriptor.DiscretionaryAcl プロパティを使用します。 このメソッドは IDispatch ポインターを返します。 その IDispatch ポインターで QueryInterface を呼び出して IADsAccessControlList インターフェイスを取得し、そのインターフェイスのメソッドを使用して ACL 内の個々の ACE にアクセスします。

  4. CoCreateInstance を使用して、新しい ACE の ADSI COM オブジェクトを作成し、そのオブジェクトへの IADsAccessControlEntry インターフェイス ポインターを取得します。 クラス ID がCLSID_AccessControlEntryされていることに注意してください。

  5. IADsAccessControlEntry メソッドを使用して ACE のプロパティを設定します。

    1. IADsAccessControlEntry::p ut_トラスティを使用して、この ACE が適用されるトラスティを設定します。 トラスティは、ユーザー、グループ、またはその他のセキュリティ プリンシパルです。 アプリケーションでは、ACE を適用するトラスティのユーザーまたはグループ オブジェクトの適切なプロパティの値を使用する必要があります。 トラスティは BSTR として指定され、次の形式をとることができます。
      • Doメイン アカウント (以前のバージョンの Windows NT で使用されるログオン名) の形式 "<doメイン>\<user account>" ("<doメイン>" は Windows NT do の名前ですメインユーザーを含む "<user account>" は指定されたユーザーの sAMAccountName プロパティです。 例: "fabrikam\jeffsmith"。
      • すべてのユーザー、ローカル システム、プリンシパルセルフ、認証済みユーザー、作成者所有者など、Windows NT セキュリティ システムによって定義された特殊な ID を表す既知のセキュリティ プリンシパル。 既知のセキュリティ プリンシパルを表すオブジェクトは、構成コンテナーの下にある既知のセキュリティ プリンシパル コンテナーに格納されます。 たとえば、匿名ログオンなどです。
      • Windows NT セキュリティ システムによって定義された組み込みのユーザー グループを表す組み込みグループ。 "BUILTIN\<group name>" という形式で、"<group name>" は組み込みのユーザー グループの名前です。 組み込みグループを表すオブジェクトは、doメイン コンテナーの下の組み込みコンテナーに格納されます。 たとえば、"BUILTIN\管理istrators" などです。
      • 指定したユーザーの SID (文字列形式) です。これは 、指定したユーザーの objectSID プロパティです。 Win32 セキュリティ API の ConvertSidToStringSid 関数を使用して、文字列形式に変換できます。 例: "S-1-5-32-548"。
    2. アクセス権を指定するマスクを 設定するには、IADsAccessControlEntry.AccessMask プロパティを使用します。 ADS_RIGHTS_ENUM列挙体は、ディレクトリ オブジェクトに設定できるアクセス権を指定します。
    3. IADsAccessControlEntry.AceType プロパティを使用して、AccessMask によって設定されたアクセス権を許可または拒否するかどうかを指定します 標準権限の場合、これはADS_ACETYPE_ACCESS_ALLOWEDまたはADS_ACETYPE_ACCESS_DENIEDできます。 オブジェクト固有の権限 (オブジェクトの特定の部分または特定の種類のオブジェクトに適用される権限) には、ADS_ACETYPE_ACCESS_ALLOWED_OBJECTまたはADS_ACETYPE_ACCESS_DENIED_OBJECTを使用します。 ADS_ACETYPE_ENUM列挙型は、ACE で設定できるアクセスの種類を指定します。
    4. IADsAccessControlEntry.AceFlags プロパティを使用して、指定したオブジェクトの下にある他のコンテナーまたはオブジェクトが ACE を継承できるかどうかを指定します。 ADS_ACEFLAG_ENUM列挙体は、ACE に設定できる継承フラグを指定します。
    5. IADsAccessControlEntry.Flags プロパティを使用して、権限がオブジェクトの特定の部分、継承されたオブジェクト型、またはその両方に適用されるかどうかを指定します。
    6. Flags が ADS_FLAG_OBJECT_TYPE_PREStandard Edition NT設定されている場合は、IADsAccessControlEntry.ObjectType プロパティを設定して、オブジェクト クラスの GUID (ADS_RIGHT_DS_CREATE_CHILDまたはADS_RIGHT_DS_DELETE_CHILD)、プロパティ、プロパティ セット、検証済み書き込み、または ACE が適用される拡張権限を含む文字列を指定します。 GUID は、COM ライブラリの StringFromGUID2 関数によって生成されるフォームの文字列として指定する必要があります。
    7. Flags が ADS_FLAG_INHERITED_OBJECT_TYPE_PREStandard Edition NT設定されている場合は、ACE が適用される継承オブジェクト クラスの GUID を含む文字列を指定するように IADsAccessControlEntry.InheritedObjectType プロパティを設定します。 GUID は、COM ライブラリの StringFromGUID2 関数によって生成されるフォームの文字列として指定する必要があります。
  6. IDispatch ポインターを取得するには、IADsAccessControlEntry オブジェクトの QueryInterface メソッドを使用します。 IADsAccessControlList.AddAce メソッドにはACE への IDispatch インターフェイス ポインターが必要です。

  7. IADsAccessControlList.AddAce を使用して、新しい ACE を DACL に追加します。 ACL 内の ACE の順序がオブジェクトへのアクセスの評価に影響する可能性があることに注意してください。 オブジェクトへの正しいアクセスでは、新しい ACL を作成し、既存の ACL の ACE を正しい順序で新しい ACL に追加し、セキュリティ記述子の既存の ACL を新しい ACL に置き換える必要がある場合があります。 詳細については、DACL の ACE の順序を参照してください

  8. IADsSecurityDescriptor.DiscretionaryAcl プロパティを使用して、新しい ACE を含む DACL をセキュリティ記述子に書き込みます。 DACL の詳細については、「NULL DACL と空の DACL」を参照してください

  9. IADs.Put メソッドを使用して、セキュリティ記述子をオブジェクトの nTSecurityDescriptor プロパティにプロパティ キャッシュに書き込みます。

  10. IADs.SetInfo メソッドを使用して、ディレクトリ内のオブジェクトのプロパティを更新します。