Suporte a blocos e eventos de dados WMI em seu driver

[Aplica-se somente ao KMDF]

Os drivers baseados em estrutura dão suporte a blocos de dados WMI fornecendo funções de retorno de chamada de evento. Os drivers dão suporte a eventos WMI chamando um método de objeto que envia um evento para clientes WMI.

Suporte a blocos de dados WMI de leitura/gravação

Se as informações em um bloco de dados WMI forem legíveis e graváveis por clientes WMI, o driver deverá fornecer uma função de retorno de chamada EvtWmiInstanceQueryInstance que atende às solicitações de leitura de um cliente, além das funções de retorno de chamada EvtWmiInstanceSetInstance ou EvtWmiInstanceSetItem (ou ambas) que atende às solicitações de gravação de um cliente.

Se o bloco de dados contiver métodos que o driver executa a pedido do cliente, o driver também deverá fornecer uma função de retorno de chamada EvtWmiInstanceExecuteMethod .

Se um bloco de dados WMI for somente gravação (ou seja, os clientes WMI poderão gravar informações no bloco de dados, mas não puderem ler o bloco de dados), o driver não fornecerá uma função de retorno de chamada EvtWmiInstanceQueryInstance .

Suporte a blocos de dados WMI Read-Only

Se as informações em um bloco de dados WMI não puderem ser modificadas por um cliente WMI, o driver não fornecerá funções de retorno de chamada EvtWmiInstanceSetInstance ou EvtWmiInstanceSetItem . Para dar suporte a solicitações de informações do bloco de dados de clientes WMI, o driver pode fazer um dos seguintes procedimentos:

Se o driver definir UseContextForQuery como TRUE, a estrutura copiará o espaço de contexto do objeto de instância em um buffer fornecido por WMI quando um cliente WMI solicitar as informações da instância. Nenhum retorno de chamada EvtWmiInstanceXxxx será necessário se o driver tiver apenas uma única instância WMI que forneça dados de comprimento fixo somente leitura de sua área de contexto de objeto.

Se um bloco de dados somente leitura contiver métodos executados pelo driver a pedido do cliente, o driver também poderá fornecer uma função de retorno de chamada EvtWmiInstanceExecuteMethod .

Suporte a blocos de dados WMI caros

Se o driver coletar quantidades relativamente grandes de dados dinâmicos para dar suporte a um de seus blocos de dados WMI, o driver deverá fazer o seguinte:

  • Declare o bloco de dados como "caro" definindo o sinalizador WdfWmiProviderExpensive no membro Flags da estrutura WDF_WMI_PROVIDER_CONFIG do objeto do provedor WMI.

  • Forneça uma função de retorno de chamada EvtWmiProviderFunctionControl que habilita e desabilita a coleta de dados para o bloco de dados ou chame WdfWmiProviderIsEnabled para determinar se o driver deve habilitar ou desabilitar a coleta de dados.

Se o driver definir o sinalizador WdfWmiProviderExpensive , a estrutura chamará a função de retorno de chamada EvtWmiProviderFunctionControl quando um cliente WMI se registrar para acessar o bloco de dados. A função de retorno de chamada deve habilitar a capacidade do driver de coletar dados. Se todos os clientes WMI removerem seus registros para o bloco de dados, a estrutura chamará a função de retorno de chamada EvtWmiProviderFunctionControl novamente para que o driver possa parar de coletar dados.

Suporte a eventos WMI

Um driver pode usar eventos WMI para notificar os clientes WMI de condições excepcionais. (Você não deve usar eventos WMI como uma alternativa aos erros de log.) Assim como os itens de dados, os eventos WMI são definidos em blocos de dados WMI em arquivos de formato de objeto gerenciado (.mof).

Os clientes WMI se registram para notificação de eventos WMI. Para enviar um evento para clientes WMI registrados, o driver chama o método WdfWmiInstanceFireEvent . Esse método permite que o driver envie opcionalmente dados específicos do evento para os clientes.

Se o bloco de dados WMI que define o evento também contiver itens de dados WMI ou itens de método, o driver fornecerá funções de retorno de chamada WMI apropriadas. Se um bloco de dados definir um evento, mas não contiver dados ou itens de método, o driver deverá definir o sinalizador WdfWmiProviderEventOnly no membro Flags da estrutura WDF_WMI_PROVIDER_CONFIG do objeto do provedor WMI.

O driver deve chamar WdfWmiInstanceFireEvent somente se um cliente WMI tiver se registrado para notificação de eventos. O driver pode determinar se deve chamar WdfWmiInstanceFireEvent fornecendo uma função de retorno de chamada EvtWmiProviderFunctionControl ou chamando WdfWmiProviderIsEnabled.

Suporte ao rastreamento de eventos WMI

Os eventos de rastreamento são definidos em arquivos .mof da mesma maneira que outros eventos WMI. Quando o driver cria um objeto de provedor WMI para um evento de rastreamento, ele deve definir o sinalizador WdfWmiProviderTracing no membro Flags da estrutura WDF_WMI_PROVIDER_CONFIG do objeto do provedor.

Depois que uma instância de provedor tiver sido registrada, o driver poderá chamar WdfWmiProviderGetTracingHandle para obter um identificador de rastreamento. O driver pode usar o identificador de rastreamento como entrada para a rotina WmiTraceMessage .

Para obter mais informações sobre o rastreamento de eventos, consulte: