Registrando um provedor de classe
Para criar um provedor de classe WMI, você deve registrar a instância __Win32Provider que representa seu provedor usando uma instância de __ClassProviderRegistration. Como um objeto COM, seu provedor deve se registrar no sistema operacional e no WMI. O procedimento a seguir pressupõe que você já tenha implementado o processo de registro conforme descrito em Registrando um provedor. Se o seu provedor armazenar a maioria dos dados no repositório WMI e esses dados forem atualizados somente na inicialização do WMI, registre sua classe como um provedor de classe push. Se os dados que você está fornecendo mudam com freqüência e são recuperados dinamicamente pelo seu código em cada solicitação do WMI, registre seu provedor como um provedor de classe pull.
O procedimento a seguir descreve como registrar um provedor de classe push.
Para registrar um provedor de classe push
Defina a propriedade InteractionType da instância __ClassProviderRegistration como 1.
A criação de uma instância de __ClassProviderRegistration faz parte do processo de registro.
O procedimento a seguir descreve como registrar um provedor de classe pull.
Para registrar um provedor de classe pull
Crie uma instância da classe __Win32Provider que descreve o provedor.
Crie uma instância da classe __ClassProviderRegistration que descreve o conjunto de recursos do provedor.
Na instância __ClassProviderRegistration:
Defina a propriedade InteractionType para indicar se o provedor é um provedor push ou pull.
Etiquete 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 Provedor especifica o nome do provedor que o WMI deve usar.
Defina as propriedades ResultSetQueries, ReferencedSetQueriese UnsupportedQueries.
Essas propriedades de consulta descrevem informações detalhadas sobre a classe suportada.
Além de descrever os vários métodos suportados 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 toda a gama de classes fornecidas pelo provedor de classe. Cada propriedade de consulta contém uma instrução WQL SELECT, chamada de "consulta de esquema", para especificar os tipos de classes suportadas. As consultas de esquema especificam um nome de classe especial chamado meta_class. A tabela a seguir lista as propriedades da consulta.
Propriedade | Descrição |
---|---|
ConsultasConjuntoDeResultados | 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 satisfazer uma consulta de um aplicativo. Esta 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 requer que um provedor especifique pelo menos uma consulta nessa 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 onde associações e referências estão sendo solicitadas. Os provedores que podem fornecer classes de associação devem incluir pelo menos uma consulta na sua propriedade ReferencedSetQueries. |
UnsupportedQueries | Contém informações sobre o conjunto de resultados que um fornecedor de classes não disponibiliza. WMI usa essa propriedade para subtrair do conjunto de classes implícitas por ResultSetQueries. Por exemplo, um provedor de classe pode especificar em ResultSetQueries suporte para todas as classes derivadas de MyClass e especificar em UnsupportedQueries falta de suporte para uma classe derivada específica. Quanto mais informações um provedor puder registrar sobre seus recursos de processamento de consultas, 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 oferece suporte à cláusula OR, você deve criar 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.