Partilhar via


Fornecendo dados ao WMI

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

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

Criando 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 irá expor. Por exemplo, se planeia gerir a resolução do ecrã do ambiente de trabalho, deve decidir como modelar o ambiente de trabalho num ficheiro de Managed Object Format (MOF).

Para criar um modelo útil:

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

Implementando 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 Designing Managed Object Format (MOF) Classes. O registro do provedor e suas classes são geralmente incluídos no arquivo MOF, embora seja possível usar o API COM para criar classes e métodos. Para obter mais informações, consulte Desenvolvendo um provedor WMI.

Observação

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

 

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 WMI definida no arquivo MOF ao repositório WMI para que a classe possa ser usada por um provedor.

Determinando um tipo de provedor a ser implementado

O WMI suporta um determinado número de tipos de provedores, o que determina a natureza das informações entregues e das operações suportadas pelos 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 Desenvolvendo um provedor WMI.

Determinando 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 dentro de um processo específico e contexto de segurança. Isto é o que WMI se refere como o modelo de hospedagem . O WMI oferece várias maneiras de hospedar provedores, mas a abordagem mais comum é usar o modelo de provedor acoplado (executado sob o processo WMI) no contexto de segurança NetworkServiceHost. Um provedor WMI pode ser classificado como acoplado ou desacoplado.

O termo provedor acoplado ou desacoplado determina em qual processo de host o provedor está a ser executado em relação ao processo WMIPRVSE.EXE fornecido pelo WMI. Uma prática recomendada é determinar se os dados de gerenciamento que o provedor expõe e a API ou aplicativo em que ele se baseia estão sempre disponíveis no sistema ou não. Se a API ou aplicativo no qual o provedor confia estiver sempre disponível (em execução no sistema), o provedor deve ser um provedor acoplado, se não, deve ser um provedor dissociado. Para obter mais informações sobre modelos de hospedagem, consulte Provider Hosting and Security.

Para obter mais informações sobre como criar um provedor acoplado, consulte Fornecendo dados ao WMI escrevendo um provedore para obter informações sobre como incorporar um provedor dissociado em um aplicativo, consulte Incorporando um provedor em um aplicativo.

Provedores acoplados podem ser descritos como dentro do processo (in-proc) ou fora do processo (out-of-proc). Quando um provedor acoplado é um provedor in-proc, ele é executado sob um processo de hospedagem WMI WMIPRVSE.EXE compartilhado e é implementado como um servidor COM in-proc (.dll). Quando um provedor é um provedor fora do proc, ele é iniciado pelo WMI a pedido de um cliente ou evento, mas é executado como um processo separado e é implementado como um executável (.exe).

Implementando um provedor

Um provedor pode ser implementado das seguintes maneiras:

  • Usando o Assistente de ATL no Visual Studio.

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

  • Definir um objeto COM para conter o seu provedor.

    O código do provedor é escrito em C++. Para mais informações, consulte Como fornecer dados ao WMI através da criação de um provedor.

  • Usando as classes no Microsoft.Management.Infrastructure namespace no .NET Framework para criar um provedor usando código gerenciado. (O namespace System.Management.Instrumentation não é mais suportado.)

    Esse processo cria um provedor dissociado.

Registar um provedor no WMI e no sistema

Antes de usar um fornecedor como consumidor, é importante registá-lo no sistema WMI e no subsistema Windows COM.

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 Registar um Fornecedor.

Testando um provedor

Quando o código do provedor é registrado, é importante testar corretamente o provedor usando o provedor de diferentes consumidores (por exemplo, scripts, código gerenciado .NET e consumidores C++).

Execute as seguintes tarefas para testar seu provedor:

  • Certifique-se de que seu provedor está carregando corretamente, rastreando as notificações de eventos MSFT_WmiProvider_OperationEvent. Esses eventos irão informá-lo sobre quaisquer falhas de carregamento do provedor. Outras classes de 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 Debugging Providers e Provider Configuration and Troubleshooting Classes.
  • Se o provedor for um provedor de instância ou método, certifique-se de testar cada recurso do provedor um por um para evitar confusão ao seguir sua lógica de código.
  • Para um provedor de instância, crie uma aplicação cliente ou script que invoque cada interface do provedor (enumeração, obter, colocar e eliminar). Mesmo que o provedor não deva implementar nada, ele deve retornar uma mensagem "não suportado". Você pode encontrar os valores de retorno já definidos em WMI Return Codes.
  • Para garantir que o contexto de segurança desejado esteja funcionando conforme planejado, invoque as operações suportadas pelo provedor a partir de um contexto de segurança não administrador. O provedor deve apoiar a falsificação de identidade. 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 deve negar o acesso com a mensagem de erro apropriada.
  • Para obter mais informações sobre segurança do provedor, consulte Protegendo seu provedor.

Desenvolvendo um provedor WMI

Provedor de Hospedagem e Segurança

Fornecimento de Dados ao WMI através da Escrita de um Provedor

Incorporando um provedor em um aplicativo

Registrando um provedor

Solução de problemas de aplicativos cliente WMI

Proteger o seu fornecedor

Obter e fornecer dados em uma plataforma de 64 bits