Registrar um provedor de classe

Para criar um provedor de classe WMI, registre a instância __Win32Provider que representa seu provedor usando uma instância de __ClassProviderRegistration. Como um objeto do COM, seu provedor deve se registrar no sistema operacional e no WMI. O procedimento a seguir pressupõe que você já implementou o processo de registro, conforme descrito em Registrar um provedor. Se o provedor armazenar a maioria dos dados no repositório WMI e esses dados forem atualizados apenas na inicialização do WMI, registre sua classe como um provedor de classe push. Se os dados que você estiver fornecendo forem alterados com frequência e recuperados dinamicamente pelo código em cada solicitação do WMI, registre seu provedor como um provedor de classe de pull.

O procedimento a seguir descreve como registrar um provedor de classe push.

Para registrar um provedor de classe push

O procedimento a seguir descreve como registrar um provedor de classe push.

Para registrar um provedor de classe push

  1. Crie uma instância da classe __Win32Provider que descreve o provedor.

  2. Crie uma instância da classe __ClassProviderRegistration que descreve o conjunto de recursos do provedor.

    Na instância de __ClassProviderRegistration:

    1. Defina a propriedade InteractionType para indicar se o provedor é um provedor push ou pull.

    2. Marque a classe com os qualificadores Dynamic e Provider.

      O qualificador Dynamic sinaliza que o WMI deve usar um provedor para recuperar as instâncias de classe. O qualificador Provider especifica o nome do provedor que o WMI deve usar.

    3. Defina as propriedades ResultSetQueries, ReferencedSetQueries e UnsupportedQueries.

      Essas propriedades de consulta descrevem informações detalhadas sobre a classe compatível.

Além de descrever vários métodos compatíveis de uma classe, a classe __ClassProviderRegistration também tem três propriedades que descrevem uma série de consultas. Quando usadas juntas, essas três propriedades descrevem todo o intervalo de classes fornecidas pelo provedor de classe. Cada propriedade de consulta contém uma instrução SELECT WQL, chamada de "consulta de esquema", para especificar os tipos de classes compatíveis. As consultas de esquema especificam um nome de classe especial chamado meta_class. A tabela a seguir lista as propriedades de consulta.

Propriedade Descrição
ResultSetQueries Contém informações sobre o conjunto de resultados fornecido pelo provedor. O WMI usa as informações para determinar se o provedor deve ser invocado para atender a uma consulta de um aplicativo. Essa propriedade descreve o conjunto de todas as classes que o provedor pode fornecer ou um superconjunto das classes disponíveis, mas nunca um subconjunto. O WMI exige que um provedor especifique pelo menos uma consulta nesta propriedade.
O exemplo a seguir mostra como definir ResultSetQueries quando um provedor fornece uma classe de associação que faz referência à classe Win32_LogicalDisk.
SELECT * FROM meta_class WHERE __Class = "Win32_LogicalDisk"
O exemplo a seguir mostra como especificar uma consulta geral quando um provedor fornece classes que fazem referência a outras classes desconhecidas.
SELECT * FROM meta_class
O exemplo a seguir mostra como definir ResultSetQueries quando um provedor fornece apenas subclasses, mas não a classe pai de uma determinada classe.
SELECT * FROM meta_class WHERE __Dynasty = "MyClass"
O exemplo a seguir mostra como usar a propriedade __this especial e definir ResultSetQueries quando um provedor fornece todas as classes e subclasses.
SELECT * FROM meta_class WHERE __this ISA "MyClass"
ReferencedSetQueries Determina se o provedor deve ser ignorado em consultas de esquema em que associações e referências estão sendo solicitadas. Os provedores que podem fornecer classes de associação devem incluir pelo menos uma consulta em sua propriedade ReferencedSetQueries.
UnsupportedQueries Contém informações sobre o conjunto de resultados que um provedor de classe não fornece. O WMI usa essa propriedade para subtrair do conjunto de classes implícito por ResultSetQueries. Por exemplo, um provedor de classe pode especificar no suporte a ResultSetQueries para todas as classes derivadas de MyClass e especificar em UnsupportedQueries uma falta de suporte para uma classe derivada específica.
Quanto mais informações um provedor puder registrar sobre seus recursos de processamento de consulta, mais rápido ele será executado. Inserir uma ou mais consultas na propriedade UnsupportedQueries é uma maneira de ser específico e é particularmente importante quando um provedor depende de uma classe que não fornece. Quando uma solicitação é feita para uma classe listada em uma consulta na propriedade UnsupportedQueries, o WMI pode fornecer a própria classe ou invocar um provedor alternativo para fornecê-la.

Como o WMI não dá suporte à cláusula OR, crie uma consulta separada para cada classe.

As consultas a seguir são especificadas em ResultSetQueries quando um provedor de classe fornece MyClass1, MyClass2 e MyClass3.

SELECT * FROM meta_class WHERE __Class = "MyClass1"
SELECT * FROM meta_class WHERE __Class = "MyClass2"
SELECT * FROM meta_class WHERE __Class = "MyClass3"

Somente os administradores podem registrar ou excluir um provedor criando uma instância de __Win32Provider e __ClassProviderRegistration.