Compartilhar via


Mapear classes do Active Directory

Como o Active Directory tem uma ampla variedade de possíveis objetos, o WMI não pode criar um mapeamento direto um para um. Em vez disso, o provedor de serviços de diretório usa regras para mapear classes entre as duas tecnologias.

As seguintes seções são abordadas neste tópico:

Observação

Para obter mais informações sobre suporte e instalação desse componente em um sistema operacional específico, consulte Disponibilidade dos componentes do WMI no sistema operacional.

Classes de mapeamento

A lista a seguir descreve as diretrizes que o provedor de serviços de diretório usa para mapear classes do Active Directory para classes do WMI:

  • Cada classe abstrata no esquema do Active Directory é mapeada para uma classe abstrata no esquema do WMI.

    No esquema do WMI, cada classe abstrata é prefixada com DS_. Por exemplo, a classe person do esquema do Active Directory é mapeada para a classe DS_person do WMI.

  • Cada classe não abstrata do esquema do Active Directory é mapeada para as duas classes a seguir no esquema do WMI:

    • A primeira classe mapeada é prefixada com ADS_. Essas classes são abstratas e mapeadas de acordo com as regras abaixo.
    • A segunda classe mapeada é uma classe não abstrata com o prefixo de nome DS_. Essa classe é derivada da classe abstrata ADS_, com a adição do qualificador Provider.

    Por exemplo, a classe usuário do esquema do Active Directory é mapeada para duas classes. A primeira classe é a classe abstrata ADS_user, mapeada de acordo com as regras abaixo. A segunda classe é a classe não abstrata DS_user. Ela é derivada de ADS_user e tem o qualificador Provider adicionado.

  • A menos que especificado de outra forma, o nome de uma classe mapeada é o valor danificado da propriedade LDAP-Display-Name na classe do Active Directory.

  • Se a propriedade Sub-Class-Of estiver presente na classe do Active Directory, a classe mapeada do WMI será derivada da classe especificada.

    Se a propriedade Sub-Class-Of não estiver presente, a classe mapeada do WMI será derivada da classe DS_LDAP_Root_Class, conforme especificado no arquivo MOF.

    Observação

    Essa classe tem a propriedade de chave ADSIPath, com um tipo VT_BSTR. Esse é o caminho ADSI exclusivo que identifica essa instância. O Active Directory dá suporte apenas a herança única e, portanto, isso funciona.

  • Um qualificador Dynamic do tipo VT_BOOL e a variante definida como WBEM_FLAVOR_FLAG_PROPAGATE_TO_INSTANCE | WBEM_FLAVOR_FLAG_PROPAGATE_TO_DERIVED_CLASSTRUE é criada para cada classe. Esse é um qualificador padrão do WMI que indica que as instâncias dessa classe são fornecidas dinamicamente.

  • Se a classe não for abstrata, o provedor criará um qualificador Provider do tipo VT_BSTR BOOL e a variante WBEM_FLAVOR_FLAG_PROPAGATE_TO_INSTANCE | WBEM_FLAVOR_FLAG_PROPAGATE_TO_DERIVED_CLASS do qualificador definida como "Provedor de Instância DS" para cada classe. Esse é um qualificador padrão do WMI que indica o nome do provedor fornecendo dinamicamente instâncias dessa classe.

O restante das propriedades ADSI é mapeado para qualificadores de classe e propriedades de acordo com as tabelas a seguir. Todos os qualificadores são mapeados com um valor de sinalizador qualificador de WBEM_FLAVOR_FLAG_PROPAGATE_TO_INSTANCE | WBEM_FLAVOR_FLAG_PROPAGATE_TO_DERIVED_CLASS.

As listas a seguir relacionam informações de mapeamento para a classe do Active Directory, mostrando o qualificador do WMI e o tipo de qualificador do WMI para cada propriedade do Active Directory.

Common-Name

CN (VT_BSTR)

Mapeado diretamente do valor da cadeia de caracteres.

Default-Object-Category

DefaultObjectCategory (VT_BSTR)

Mapeado diretamente do valor da cadeia de caracteres.

Default-Security-Descriptor

DefaultSecurityDescriptor (VT_BSTR)

Mapeado diretamente do valor da cadeia de caracteres.

Governs-Id

GovernsId (VT_BSTR)

Mapeado da representação da cadeia de caracteres do OID; por exemplo, "{ 1 3 3 6 }".

Object-Class

N/D

Não mapeado.

Object-Class-Category

ObjectClassCategory (VT_I4)

Mapeado diretamente do valor inteiro. Além disso, se o valor for Abstract(2), o qualificador padrão VT_BOOL do CIM, chamado de qualificador "Abstract", também será criado.

RDN-ATT-ID

RDNATTID (VT_BSTR)

Mapeado da representação de cadeia de caracteres do valor OID; por exemplo, "{ 1 3 3 6 }". Além disso, a propriedade identificada aqui é anotada com o qualificador padrão indexado do CIM definido como TRUE.

System-Only

SystemOnly (VT_BOOL)

Mapeado diretamente do valor booliano.

Segue uma lista as propriedades da classe do Active Directory mapeadas para as propriedades da classe do WMI.

May-Contain

Cada propriedade nessa lista é mapeada para uma propriedade do WMI.

Must-Contain

Cada propriedade nessa lista é mapeada para uma propriedade do WMI. O qualificador padrão Not_Null do CIM é criado para cada um deles.

System-May-Contain

Cada propriedade nessa lista é mapeada para uma propriedade do WMI. Além disso, cada propriedade é anotada com um qualificador system, definido como TRUE.

System-Must-Contain

Cada propriedade nessa lista é mapeada para uma propriedade do WMI. O qualificador padrão Not_Null do CIM é criado para cada um deles. Além disso, cada propriedade é anotada com um qualificador system, definido como TRUE.

Atributos de mapeamento

O provedor de serviços de diretório mapeia cada atributo de uma classe do Active Directory para exatamente uma propriedade da classe do WMI correspondente de acordo com as regras nesta seção. Em geral, o provedor de serviços de diretório nomeia a propriedade do WMI como a versão danificada do valor LDAP-Display-Name do atributo do Active Directory.

Se a propriedade Is-Single-Valued do Active Directory for FALSE, essa propriedade do WMI será combinada com o operador OR com CIM_FLAG_ARRAY. Observe que cada propriedade é marcada com o qualificador do VT_BSTR, ADSyntax. Ele representa a sintaxe subjacente do Active Directory.

A tabela a seguir lista o mapeamento da sintaxe do Active Directory para o tipo de dados da propriedade do WMI.

Elemento Active Directory Tipo de dados do WMI
Access-Point CIM_STRING
Boolean CIM_BOOLEAN
Cadeia de caracteres que não diferencia maiúsculas de minúsculas CIM_STRING
Cadeia de caracteres que diferencia maiúsculas de minúsculas CIM_STRING
Nome distinto CIM_STRING
DN-Binary Objeto inserido da classe DN_With_Binary definido abaixo.
DN-String Objeto inserido da classe DN_With_String definido abaixo.
Enumeração CIM_SINT32
Enumeração CIM_STRING
Integer CIM_SINT32
LargeInteger CIM_STRING
Descritor de Segurança Objeto inserido da classe Uint8Array definido abaixo.
Cadeia de caracteres numéricos CIM_STRING
ID de objeto CIM_STRING
Octet String Objeto inserido da classe Uint8Array definido abaixo.
Nome OR CIM_STRING
Endereço de apresentação Objeto inserido da classe Uint8Array definido abaixo.
Cadeia de caracteres de maiúsculas CIM_STRING
Link de réplica Objeto inserido da classe Uint8Array definido abaixo.
String(Sid) Objeto inserido da classe Uint8Array definido abaixo.
Hora CIM_DATETIME
Horário codificado UTC CIM_DATETIME
Cadeia de caracteres Unicode CIM_STRING

A sintaxe Octet String, que se refere a uma matriz de valores uint8, apresenta um problema quando mapeada para o WMI porque o WMI permite propriedades de tipos uint8 e matrizes de uint8, enquanto o Active Directory permite propriedades do tipo Octet String, bem como matrizes de Octet String.

O exemplo a seguir mostra a classe do provedor de serviços de diretório que é usada para mapear uma matriz de propriedades do tipo Octet String.

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

O WMI mapeia todos os valores da propriedade Octet String do Active Directory para instâncias inseridas de Uint8Array. Da mesma forma, o WMI mapeia matrizes de Octet String para matrizes de objetos Uint8Array inseridos.

O exemplo a seguir mostra as classes mapeadas pelo WMI para valores de propriedade DS DN-Binary e DN-String.

Class DN_With_String
{
    string dnString;
    string value;
};

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

A tabela a seguir lista como o WMI mapeia o restante das propriedades da interface de atributo do Active Directory para qualificadores de propriedade do WMI.

Nome da propriedade de atributo do Active Directory Qualificador do WMI Tipo de dados Informações de mapeamento
Attribute-Syntax AttributeSyntax VT_BSTR Mapeado da representação da cadeia de caracteres do OID.
Common-Name CN VT_BSTR Mapeado do valor da cadeia de caracteres.
System-Only System VT_BOOL Mapeado do valor booliano.

Observação

O WMI mapeia todos os qualificadores do Active Directory com as variantes WBEM_FLAVOR_FLAG_PROPAGATE_TO_INSTANCE | WBEM_FLAVOR_FLAG_PROPAGATE_TO_DERIVED_CLASS do qualificador.

Classes de associação

O serviço de diretório é essencialmente um repositório hierárquico de objetos. Os objetos que podem aparecer em um nível não folha na hierarquia são chamados de "contêineres". A estrutura dessa hierarquia é ainda mais controlada pelas propriedades "Poss-Superiors" e "System-Poss-Superiors" de uma classe no esquema. Juntas, elas especificam o conjunto de classes cujas instâncias podem estar contidas em uma instância de uma classe de contêiner.

O exemplo a seguir modela uma associação CIM como instâncias da classe de associação estática 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;
};

O provedor de classe de associação dá suporte aos métodos GetObjectAsync e CreateClassEnumAsync.