Partilhar via


Implementando a interface primária para um provedor de classe

Há duas maneiras de implementar um provedor de classe: implementar a interface como um provedor push ou como um provedor pull.

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

Implementando a interface primária para um provedor de classe push

Enquanto todos os provedores implementam IWbemProviderInit para inicialização e pelo menos uma outra interface como sua interface principal, um provedor push implementa apenas IWbemProviderInit.

Certifique-se de que sua implementação execute as seguintes tarefas:

  • Recupera os dados de classe apropriados.
  • Coloca os dados no repositório WMI.
  • Exclui dados obsoletos.

Depois de concluir o processo de inicialização, o WMI lida com todas as solicitações de aplicativos para classes pertencentes ao provedor de push sem qualquer interação adicional do provedor. Depois, o provedor de push atua efetivamente como um cliente do WMI em vez de um provedor. Para obter mais informações sobre como implementar IWbemProviderInit, consulte inicializando um provedor.

Observação

Ao chamar o WMI para criar, atualizar ou remover dados em um fornecedor de push, defina o parâmetro lFlags para incluir o sinalizador WBEM_FLAG_OWNER_UPDATE em todas as chamadas para os métodos IWbemServices.

 

Implementando a interface primária para um provedor de classe pull

Um fornecedor de pull de classe deve implementar IWbemServices como a interface primária. A interface IWbemServices suporta recuperação de dados, atualização de dados, remoção de dados, enumeração e processamento de consultas. No entanto, como IWbemServices também é usado por aplicativos e provedores para solicitar serviços de WMI, IWbemServices contém muitos métodos que são irrelevantes para um provedor de classe. Sua implementação deve oferecer suporte à recuperação de classe e enumeração, por meio dos GetObjectAsync e métodos CreateClassEnumAsync, respectivamente. A tabela a seguir lista os métodos adicionais assíncronos de IWbemServices que se pode implementar para um fornecedor de classes.

Método Funcionalidade
PutInstanceAsync Modificação
DeleteClassAsync Remoção

 

Observação

Como o retorno de chamada para o coletor pode não ser retornado no mesmo nível de autenticação exigido pelo cliente, é recomendável usar comunicação semissíncrona em vez de assíncrona. Para obter mais informações, consulte chamando um método.

 

Seu provedor de classe deve fornecer uma implementação de stub que retorne WBEM_E_PROVIDER_NOT_CAPABLE para todos os outros métodosIWbemServices que não suportam seu conjunto de recursos. Especificamente, o WMI não oferece suporte ao processamento de consultas para provedores de classe. Como tal, um provedor de classe deve retornar WBEM_E_PROVIDER_NOT_CAPABLE de sua implementação de IWbemServices::ExecQueryAsync, definir seu QuerySupportLevels propriedade de registro para NULLou ambos.

As interfaces que um provedor de classe implementa são muito semelhantes às interfaces para um provedor de instância e um provedor de método. Na verdade, um único provedor pode atuar como todos os três tipos de provedor, implementando todos os métodos e registrando-se corretamente.