映射 Active Directory 类

由于 Active Directory 包含非常多的对象,因此 WMI 无法创建直接的一对一映射。 目录服务提供程序改为了使用规则在两种技术之间映射类。

本主题将讨论以下部分:

注意

有关在特定操作系统上支持和安装该组件的详细信息,请参阅 WMI 组件的操作系统可用性

映射类

以下列表描述了目录服务提供程序用于将 Active Directory 类映射到 WMI 类的准则:

  • Active Directory 架构中的每个抽象类都映射到 WMI 架构中的一个抽象类。

    在 WMI 架构中,每个抽象类都以 DS_ 为前缀。 例如,Active Directory 架构中的 person 类映射到 DS_person WMI 类。

  • Active Directory 架构中的每个非抽象类都映射到 WMI 架构中的以下两个类:

    • 第一个映射类的前缀为 ADS_。 这些是抽象类,根据以下规则映射。
    • 第二个映射类是非抽象类,以 DS_ 作为名称前缀。 此类派生自 ADS_ 抽象类,并添加了 Provider 限定符。

    例如,Active Directory 架构中的 user 类映射到两个类。 第一个类是抽象类 ADS_user,根据以下规则映射。 第二个类是非抽象类 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 限定符,并将 Flavor 设置为 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 实例提供程序”。 这是一个标准 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),则还会创建标准 VT_BOOL CIM 限定符(称为 “Abstract”限定符)。

RDN-ATT-ID

RDNATTID (VT_BSTR)

从 OID 值的字符串表示形式映射,例如“{ 1 3 3 6 }”。 此外,此处标识的属性将进行注释,并将标准索引 CIM 限定符设置为 TRUE。

System-Only

SystemOnly (VT_BOOL)

直接从布尔值映射。

下面列出了映射到 WMI 类属性的 Active Directory 类属性。

May-Contain

此列表中的每个属性都映射到 WMI 属性。

Must-Contain

此列表中的每个属性都映射到 WMI 属性。 将为每个属性创建标准 Not_Null CIM 限定符。

System-May-Contain

此列表中的每个属性都映射到 WMI 属性。 此外,每个属性都将进行注释,并将 System 限定符设置为 TRUE。

System-Must-contain

此列表中的每个属性都映射到 WMI 属性。 将为每个属性创建标准 Not_Null CIM 限定符。 此外,每个属性都将进行注释,并将 System 限定符设置为 TRUE。

映射属性

根据本节中的规则,目录服务提供程序将 Active Directory 类的每个属性映射到相应 WMI 类的一个属性。 通常,目录服务提供程序将 WMI 属性命名为 Active Directory 属性的 LDAP-Display-Name 值的重整版本。

如果 Active Directory 属性 Is-Single-Valued 为 FALSE,则此 WMI 属性通过 OR 运算符与 CIM_FLAG_ARRAY 合并。 请注意,每个属性都使用 VT_BSTR 限定符 ADSyntax 进行标记。 此限定符表示基础 Active Directory 语法。

下表列出了 Active Directory 语法与 WMI 属性数据类型之间的映射。

Active Directory 元素 WMI 数据类型
访问点 CIM_STRING
布尔 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 类的嵌入对象,定义如下。
打印状况字符串 CIM_STRING
副本链接 Uint8Array 类的嵌入对象,定义如下。
String(Sid) Uint8Array 类的嵌入对象,定义如下。
时间 CIM_DATETIME
UTC 编码时间 CIM_DATETIME
Unicode 字符串 CIM_STRING

八进制字符串语法(引用 uint8 值数组)在映射到 WMI 时会出现问题,这是因为 WMI 允许 uint8 类型的属性和 uint8 数组,而 Active Directory 允许八进制字符串类型的属性以及八进制字符串的数组。

以下示例演示用于映射八进制字符串类型属性数组的目录服务提供程序类。

Class Uint8Array 
{
    uint8 values[];
    uint32 numberOfValues;
};

WMI 会将所有八进制字符串 Active Directory 属性值映射到 Uint8Array 的嵌入实例。 同样,WMI 会将八进制字符串数组映射到嵌入 Uint8Array 对象的数组。

以下示例演示由 WMI 映射到 DN-Binary 和 DN-String DS 属性值的类。

Class DN_With_String
{
    string dnString;
    string value;
};

Class DN_With_Binary
{
    string dnString;
    uint8 value[];
};

下表列出了 WMI 如何将其余 Active Directory 属性接口属性映射到 WMI 属性限定符。

Active Directory 属性名称 WMI 限定符 数据类型 映射信息
Attribute-Syntax attributeSyntax VT_BSTR 从 OID 的字符串表示形式映射。
Common-Name CN VT_BSTR 从字符串值映射。
System-Only 系统 VT_BOOL 从布尔值映射。

注意

WMI 使用 WBEM_FLAVOR_FLAG_PROPAGATE_TO_INSTANCE | WBEM_FLAVOR_FLAG_PROPAGATE_TO_DERIVED_CLASS 限定符风格映射所有 Active Directory 限定符。

关联类

目录服务实质上是对象的分层存储。 容器是指可在层次结构中的非叶级别显示的对象。 此层次结构的结构由架构中类的“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;
};

关联类提供程序支持 GetObjectAsyncCreateClassEnumAsync 方法。