Fornecer dados ao WMI

O WMI disponibiliza dados sobre objetos gerenciáveis do Windows por meio de provedores WMI. Um provedor recupera dados de um componente do sistema, como um processo ou um aplicativo instrumentado, como SNMP ou IIS, e passa esses dados por meio do WMI para um aplicativo de gerenciamento. Por exemplo, quando um aplicativo ou script solicita informações de processo usando a classe Win32_Process WMI, os dados são obtidos dinamicamente por meio de um provedor pré-instalado.

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

Criar um modelo para um objeto gerenciável

Antes de desenvolver um provedor, crie um modelo de dados para representar o objeto gerenciável a ser exposto por meio do WMI. Você planeja quais objetos de dados seu provedor vai expor. Por exemplo, se você planeja gerenciar a resolução de tela da tela de fundo da área de trabalho, deve decidir como modelar a Área de Trabalho em um arquivo MOF (Managed Object Format).

Para criar um modelo útil:

  • Determine cenários do mundo real e modele as informações que um cliente possa querer ler e atualizar (por exemplo, alterar a imagem de tela de fundo) para cada objeto gerenciável. Estas são as propriedades da classe.
  • Determine quais tipos de ações um cliente pode querer executar com cada objeto gerenciável. Esses são seus métodos.

Implementar um modelo para um objeto gerenciável

Para implementar um modelo para objetos gerenciáveis, crie um arquivo MOF contendo uma classe WMI que representa cada objeto. Para obter mais informações sobre como criar um arquivo MOF para definir classes WMI, consulte Criar classes MOF (Managed Object Format). O registro do provedor e suas classes geralmente são incluídos no arquivo MOF, embora seja possível usar a API COM para criar classes e métodos. Para obter mais informações, confira Desenvolver um provedor WMI.

Observação

Para garantir que todas as definições de classe do WMI para objetos gerenciados sejam restauradas no repositório do WMI se o WMI tiver uma falha e reiniciar, use a instrução de pré-processador #pragma autoecover no arquivo MOF (Managed Object Format).

 

Depois de criar o arquivo MOF, compile-o usando a ferramenta Mofcomp.exe. Isso notifica você sobre erros no arquivo MOF e adiciona a classe do WMI definida no arquivo MOF ao repositório do WMI para que a classe possa ser usada por um provedor.

Determinar um tipo de provedor a ser implementado

O WMI dá suporte a um determinado número de tipos de provedor, o que determina a natureza das informações entregues e as operações com suporte dos provedores.

Os tipos de provedor são:

A grande maioria dos provedores são provedores de instância e provedores de método. Um provedor de instância é o provedor mais comum e fornece as instâncias de uma determinada classe. Um provedor de método implementa os métodos de uma ou mais classes. Para obter mais informações sobre os tipos de provedores, consulte Desenvolver um provedor WMI.

Determinar um modelo de hospedagem (implementação) para um provedor

Os provedores WMI são binários implementados como objetos COM. Isso significa que cada provedor tem um arquivo DLL que pode ser executado em um processo específico e um contexto de segurança. Isso é o que é conhecido como modelo de hospedagem no WMI. O WMI oferece várias maneiras de hospedar provedores, mas a abordagem mais comum é usar o modelo de provedor acoplado (em execução no processo do WMI) no contexto de segurança NetworkServiceHost. Um provedor WMI pode ser classificado como acoplado ou desacoplado.

O termo acoplado ou desacoplado relativo ao provedor determina o processo de host sob qual o provedor está executando em relação ao processo WMIPRVSE.EXE fornecido pelo WMI. Uma prática recomendada é determinar se os dados de gerenciamento expostos pelo provedor e a API ou aplicativo do qual ele depende estão sempre disponíveis no sistema ou não. Se a API ou o aplicativo do qual o provedor depende estiver sempre disponível (em execução no sistema), o provedor deverá ser do tipo acoplado, caso contrário, ele deverá ser um provedor desacoplado. Para obter mais informações sobre modelos de hospedagem, consulte Hospedagem e segurança do provedor.

Para obter mais informações sobre como criar um provedor acoplado, consulte Fornecer dados para o WMI escrevendo um provedor e para obter informações sobre como incorporar um provedor desacoplado em um aplicativo, consulte Incorporar um provedor em um aplicativo.

Os provedores acoplados podem ser descritos como em processo (in-proc) ou fora do processo (out-of-proc). Quando um provedor acoplado é um provedor in-proc, ele é executado em um processo de hospedagem WMI WMIPRVSE.EXE compartilhado e é implementado como um servidor COM in-proc (.dll). Quando um provedor é um provedor out-of-proc, ele é iniciado pelo WMI por solicitação de um cliente ou um evento, mas é executado como um processo separado e implementado como um executável (.exe).

Como implementar um provedor

Um provedor pode ser implementado das seguintes maneiras:

  • Usando o Assistente da ATL no Visual Studio.

    O Assistente da ATL gera o código do provedor que implementa um provedor acoplado. Ao usar o Assistente da ATL, você pode especificar que deseja criar um modelo de tempo de execução de provedor in-proc (.dll) ou out-of-proc (.exe).

  • Definindo um objeto COM para conter seu provedor.

    O código do provedor é escrito em C++. Para obter mais informações, consulte Fornecer dados para o WMI escrevendo um provedor.

  • Usando as classes no namespace Microsoft.Management.Infrastructure no .NET Framework para criar um provedor usando código gerenciado. (Não há mais suporte para o namespace System.Management.Instrumentation).

    Esse processo cria um provedor desacoplado.

Registrar um provedor no WMI e no Sistema

Para usar o provedor de um consumidor, é importante registrá-lo no sistema do WMI e no subsistema COM do Windows.

Um arquivo MOF pode conter vários tipos de provedores para as mesmas classes. O mesmo nome de provedor é registrado como, por exemplo, uma instância ou um provedor de método. Para obter mais informações, consulte Registrar um provedor.

Testar um provedor

Quando o código do provedor é registrado, é importante testá-lo corretamente usando o provedor com diferentes consumidores (por exemplo, scripts, código gerenciado do .NET e consumidores do C++).

Execute as seguintes tarefas para testar seu provedor:

  • Verifique se o provedor está carregando corretamente observando as notificações de evento MSFT_WmiProvider_OperationEvent. Esses eventos informarão você sobre possíveis falhas de carregamento do provedor. Outras classes para solução de problemas que podem ser úteis são Win32_ProcessStartTrace e Win32_ProcessStopTrace. Para obter mais informações sobre provedores de solução de problemas, consulte Depuração de provedores e Configuração de provedor e classes de solução de problemas.
  • Se o provedor for provedor de uma instância ou um método, teste cada funcionalidade do provedor para evitar confusão ao seguir a lógica do seu código.
  • Para um provedor de instância, crie um aplicativo cliente ou script que invoque cada interface do provedor (enumeration, get, put, e delete). Mesmo que o provedor não tenha que implementar nada, ele deverá retornar uma mensagem "sem suporte". Você pode encontrar os valores retornados já definidos em Códigos de Retorno do WMI.
  • Para garantir que o contexto de segurança desejado esteja funcionando como planejado, invoque as operações com suporte do provedor em um contexto de segurança que não seja de administrador. O provedor deve dar suporte à representação. Se um usuário sem as credenciais de segurança corretas tentar atualizar dados ou executar uma operação que executa um método, seu provedor deverá negar o acesso com a mensagem de erro apropriada.
  • Para obter mais informações sobre a segurança do provedor, consulte Como proteger seu provedor.

Desenvolver um provedor de WMI

Hospedagem e segurança do provedor

Fornecer dados para o WMI escrevendo um provedor

Incorporar um provedor em um aplicativo

Como registrar um provedor

Solução de problemas de aplicativos cliente do WMI

Como proteger seu provedor

Obter e fornecer dados em uma plataforma de 64 bits