Active Directory クラスのマッピング
Active Directory にはさまざまなオブジェクトがあるため、WMI では直接 1 対 1 のマッピングを作成することができません。 代わりに、ディレクトリ サービス プロバイダーはルールを使用して、2 つのテクノロジ間でクラスをマップします。
このトピックでは、以下のセクションについて説明します。
注意
特定のオペレーティング システムでのこのコンポーネントのサポートとインストールの詳細については、「WMI コンポーネントのオペレーティング システムの可用性」を参照してください。
クラスのマッピング
次の一覧は、Active Directory クラスを WMI クラスにマップするためにディレクトリ サービス プロバイダーが使用するガイドラインを示したものです。
Active Directory スキーマ内の各抽象クラスは、WMI スキーマ内の 1 つの抽象クラスにマップされます。
WMI スキーマでは、各抽象クラスの前に DS_ が付けられます。 たとえば、Active Directory スキーマの person クラスは、DS_person WMI クラスにマップされます。
Active Directory スキーマの各非抽象クラスは、WMI スキーマ内の次の 2 つのクラスにマップされます。
- 1 つ目のマップ先クラスには、プレフィックスとして ADS_ が付けられます。 これらは抽象クラスであり、以下のルールに従ってマップされます。
- 2 つ目のマップ先クラスは、名前に DS_ というプレフィックスが付く非抽象クラスです。 このクラスは、ADS_ 抽象クラスから派生し、Provider 修飾子が追加されます。
たとえば、Active Directory スキーマの user クラスは 2 つのクラスにマップされます。 1 つ目のクラスは ADS_user 抽象クラスで、次のルールに従ってマップされます。 2 つ目のクラスは DS_user 非抽象クラスです。 これは ADS_user から派生し、Provider 修飾子が追加されます。
特に指定しない限り、マップ先クラスの名前は Active Directory クラスの LDAP-Display-Name プロパティの変形値になります。
Active Directory クラスに Sub-Class-Of プロパティが存在する場合、WMI のマップ先クラスは指定されたクラスから派生します。
Sub-Class-Of プロパティが存在しない場合、WMI のマップ先クラスは、MOF ファイルで指定された DS_LDAP_Root_Class クラスから派生します。
注意
このクラスには ADSIPath キー プロパティがあり、型は VT_BSTR です。 これは、このインスタンスを識別する一意の ADSI パスです。 Active Directory では単一継承のみがサポートされているため、これが機能します。
VT_BOOL 型の Dynamic 修飾子と、TRUE に設定されたフレーバー
WBEM_FLAVOR_FLAG_PROPAGATE_TO_INSTANCE | WBEM_FLAVOR_FLAG_PROPAGATE_TO_DERIVED_CLASS
は、すべてのクラスに対して作成されます。 これは、このクラスのインスタンスが動的に提供されることを示す、標準の WMI 修飾子です。クラスが抽象でない場合、プロバイダーは VT_BSTR BOOL 型の Provider 修飾子を作成し、すべてのクラスについて、修飾子フレーバー
WBEM_FLAVOR_FLAG_PROPAGATE_TO_INSTANCE | WBEM_FLAVOR_FLAG_PROPAGATE_TO_DERIVED_CLASS
を "DS Instance Provider" に設定します。 これは、このクラスのインスタンスを動的に提供するプロバイダーの名前を示す、標準の WMI 修飾子です。
残りの ADSI プロパティは、次の表に従ってクラス修飾子とプロパティにマップされます。 すべての修飾子は、WBEM_FLAVOR_FLAG_PROPAGATE_TO_INSTANCE | WBEM_FLAVOR_FLAG_PROPAGATE_TO_DERIVED_CLASS
という値の修飾子フラグを使用してマップされます。
次に示すのは、Active Directory クラスのマッピング情報の一覧です。各 Active Directory プロパティの WMI 修飾子と、WMI 修飾子の種類が示されています。
-
Common-Name
-
CN (VT_BSTR)
文字列値から直接マップされます。
-
Default-Object-Category
-
DefaultObjectCategory (VT_BSTR)
文字列値から直接マップされます。
-
Default-Security-Descriptor
-
DefaultSecurityDescriptor (VT_BSTR)
文字列値から直接マップされます。
-
Governs-Id
-
GovernsId (VT_BSTR)
OID の文字列表現からマップされます (たとえば、"{ 1 3 3 6 }" など)。
-
Object-Class
-
該当なし
マップされません。
-
Object-Class-Category
-
ObjectClassCategory (VT_I4)
整数値から直接マップされます。 さらに、値が Abstract(2) の場合は、"Abstract" 修飾子と呼ばれる標準の VT_BOOL CIM 修飾子も作成されます。
-
RDN-ATT-ID
-
RDNATTID (VT_BSTR)
OID 値の文字列表現からマップされます (たとえば、"{ 1 3 3 6 }" など)。 さらに、ここで識別されるプロパティには、標準の Indexed CIM 修飾子が TRUE に設定された注釈が付けられます。
-
System-Only
-
SystemOnly (VT_BOOL)
ブール値から直接マップされます。
次に示すのは、WMI クラスのプロパティにマップされる Active Directory クラスのプロパティの一覧です。
-
May-Contain
-
この一覧の各プロパティは、WMI プロパティにマップされます。
-
Must-Contain
-
この一覧の各プロパティは、WMI プロパティにマップされます。 これらのそれぞれに対して、標準の Not_Null CIM 修飾子が作成されます。
-
System-May-Contain
-
この一覧の各プロパティは、WMI プロパティにマップされます。 さらに、各プロパティには、TRUE に設定された System 修飾子の注釈が付けられます。
-
System-Must-Contain
-
この一覧の各プロパティは、WMI プロパティにマップされます。 これらのそれぞれに対して、標準の Not_Null CIM 修飾子が作成されます。 さらに、各プロパティには、TRUE に設定された System 修飾子の注釈が付けられます。
属性のマッピング
ディレクトリ サービス プロバイダーは、このセクションのルールに従って、Active Directory クラスの各属性を、対応する WMI クラスの 1 つのプロパティにマップします。 通常、ディレクトリ サービス プロバイダーは WMI プロパティに対し、Active Directory 属性の LDAP-Display-Name 値の変形バージョンで名前を付けます。
Active Directory プロパティ Is-Single-Valued が FALSE の場合、その WMI プロパティは、CIM_FLAG_ARRAY を持つ OR 演算子と組み合わされます。 各プロパティには、VT_BSTR 修飾子 ADSyntax がタグ付けされていることに注意してください。 これは、基になる Active Directory 構文を表します。
次の表は、Active Directory 構文と WMI プロパティのデータ型のマッピングを示したものです。
Active Directory 要素 | WMI データ型 |
---|---|
Access-Point | CIM_STRING |
Boolean | CIM_BOOLEAN |
大文字と小文字を区別しない文字列 | CIM_STRING |
大文字と小文字を区別する文字列 | CIM_STRING |
識別名 | CIM_STRING |
DN-Binary | 以下で定義されている、クラス DN_With_Binary の埋め込みオブジェクト。 |
DN-String | 以下で定義されている、クラス DN_With_String の埋め込みオブジェクト。 |
列挙 | CIM_SINT32 |
列挙 | CIM_STRING |
整数型 | CIM_SINT32 |
LargeInteger | CIM_STRING |
セキュリティ記述子 | 以下で定義されている、クラス Uint8Array の埋め込みオブジェクト。 |
数値文字列 | CIM_STRING |
オブジェクト ID | CIM_STRING |
オクテット文字列 | 以下で定義されている、クラス Uint8Array の埋め込みオブジェクト。 |
OR 名 | CIM_STRING |
Presentation-Address | 以下で定義されている、クラス Uint8Array の埋め込みオブジェクト。 |
Print Case String | CIM_STRING |
レプリカ リンク | 以下で定義されている、クラス Uint8Array の埋め込みオブジェクト。 |
String(Sid) | 以下で定義されている、クラス Uint8Array の埋め込みオブジェクト。 |
Time | CIM_DATETIME |
UTC コード化時刻 | CIM_DATETIME |
Unicode 文字列 | CIM_STRING |
uint8 値の配列を参照するオクテット文字列構文では、WMI にマップする際に問題が発生します。これは、WMI では uint8 型のプロパティと uint8 の配列が許可されるのに対し、Active Directory では Octet String 型のプロパティと Octet String の配列が許可されるためです。
次の例は、オクテット文字列型のプロパティの配列をマップするために使用されるディレクトリ サービス プロバイダー クラスを示したものです。
Class Uint8Array
{
uint8 values[];
uint32 numberOfValues;
};
WMI では、すべてのオクテット文字列の Active Directory プロパティ値が、Uint8Array の埋め込みインスタンスにマップされます。 同様に、WMI ではオクテット文字列の配列が、埋め込みの Uint8Array オブジェクトの配列にマップされます。
次の例は、WMI によって DS プロパティ値が DN-Binary および DN-String にマップされるクラスを示したものです。
Class DN_With_String
{
string dnString;
string value;
};
Class DN_With_Binary
{
string dnString;
uint8 value[];
};
次の表は、その他の Active Directory 属性インターフェイス プロパティが、WMI でどのように WMI プロパティ修飾子にマップされるかを示したものです。
Active Directory 属性プロパティ名 | WMI 修飾子 | データ型 | マッピング情報 |
---|---|---|---|
Attribute-Syntax | AttributeSyntax | VT_BSTR | OID の文字列表現からマップされます。 |
Common-Name | CN | VT_BSTR | 文字列値からマップされます。 |
System-Only | システム | VT_BOOL | ブール値からマップされます。 |
注意
WMI では、すべての Active Directory 修飾子が、WBEM_FLAVOR_FLAG_PROPAGATE_TO_INSTANCE | WBEM_FLAVOR_FLAG_PROPAGATE_TO_DERIVED_CLASS
修飾子フレーバーを使ってマップされます。
関連付けクラス
ディレクトリ サービスは、基本的にオブジェクトの階層型ストアです。 階層内の非リーフ レベルで表示できるオブジェクトは、"コンテナー" と呼ばれます。 この階層の構造は、スキーマ内のクラスの "Poss-Superiors" プロパティと "System-Poss-Superiors" プロパティによってさらに制御されます。 これらを組み合わせて、コンテナー クラスのインスタンス内にインスタンスを含めることができる一連のクラスが指定されます。
次の例では、CIM 関連付けを、静的関連付けクラス DS_LDAP_Class_Containment のインスタンスとしてモデル化しています。
// DS Class Associations Provider
// Create a class of which instances are
// provided by this provider
[
Association : ToInstance,
dynamic,
HasClassRefs,
Provider("Microsoft|DSLDAPClassAssociationProvider|V1.0")
]
class DS_LDAP_Class_Containment
{
[key, classref{"DS_LDAP_Root_Class"} : ToInstance ToSubClass]
object Ref ChildClass;
[key, classref{"DS_LDAP_Root_Class"} : ToInstance ToSubClass]
object Ref ParentClass; // The parent DS Class
};
// Create an instance of the provider class for registration
instance of __Win32Provider as $AssociationsProvider
{
Name = "Microsoft|DSLDAPClassAssociationProvider|V1.0";
Clsid = "{33831ED4-42B8-11d2-93AD-00805F853771}";
ImpersonationLevel = 1;
};
// Specification of the instances and operation
// provided by the provider
instance of __InstanceProviderRegistration
{
Provider = $AssociationsProvider;
SupportsGet = TRUE;
SupportsPut = FALSE;
SupportsDelete = FALSE;
SupportsEnumeration = TRUE;
};
関連付けクラス プロバイダーは、GetObjectAsync メソッドと CreateClassEnumAsync メソッドをサポートしています。