Inicializando o suporte do WMI em seu driver

[Aplica-se somente ao KMDF]

Para dar suporte a blocos de dados WMI, um driver baseado em estrutura:

  • Registra os nomes de recursos MOF (formato de objeto gerenciado) de quaisquer provedores de dados WMI personalizados que não estão definidos em Wmicore.mof.

  • Cria um ou mais objetos de instância WMI para representar os blocos de dados que ele pode ler ou gravar.

  • Opcionalmente, implementa uma ou mais funções de retorno de chamada de evento para fornecer os dados WMI fornecidos pelo driver.

  • Registre cada objeto de instância WMI para disponibilizá-lo para clientes WMI.

Para inicializar seu suporte ao WMI, um driver KMDF segue estas etapas, normalmente dentro de seu retorno de chamada EvtDriverDeviceAdd ou EvtDeviceSelfManagedIoInit :

  1. Um driver que fornece um arquivo MOF para dar suporte a provedores de dados WMI personalizados deve chamar o método WdfDeviceAssignMofResourceName para registrar um nome de recurso MOF antes que o driver crie objetos de provedor WMI que representam o provedor de dados.

  2. Inicialize uma estrutura de configuração do provedor WMI e, opcionalmente, crie um objeto de provedor WMI (WDFWMIPROVIDER).

  3. Inicialize uma estrutura de configuração de instância WMI e crie um objeto de instância WMI (WDFWMIINSTANCE).

A estrutura cria um provedor WMI por padrão quando um driver KMDF cria sua primeira instância WMI. Portanto, se o driver exigir apenas um provedor WMI, não será necessário chamar o método de criação de provedor (WdfWmiProviderCreate). No entanto, o driver deve preencher a estrutura de configuração do provedor porque essa estrutura fornece informações sobre o provedor que a estrutura usa quando cria a instância.

Se o driver criar uma única instância de cada bloco de dados WMI compatível, o driver chamará WdfWmiInstanceCreate, passando uma estrutura WDF_WMI_PROVIDER_CONFIG e uma estrutura WDF_WMI_INSTANCE_CONFIG . Essa única chamada configura o objeto de provedor WMI fornecido pela estrutura única e cria um objeto de instância WMI.

Se o driver criar várias instâncias de seus blocos de dados WMI, o driver deverá chamar WdfWmiProviderCreate e WdfWmiInstanceCreate

Registrando instâncias de provedor

Antes que os clientes WMI possam acessar os blocos de dados WMI do driver, o driver deve registrar suas instâncias de provedor com o serviço WMI do sistema. O driver pode usar qualquer uma das seguintes técnicas para registrar uma instância de provedor:

  • Defina o membro Register da estrutura WDF_WMI_INSTANCE_CONFIG da instância do provedor como TRUE.

    Se o driver definir Registrar como TRUE, a estrutura registrará automaticamente a instância na primeira vez que o dispositivo entrar em seu estado de trabalho (D0).

  • Chame o método WdfWmiInstanceRegister .

    Se o driver chamar WdfWmiInstanceRegister depois de chamar WdfWmiInstanceCreate, a estrutura registrará a instância depois que o dispositivo estiver em seu estado de trabalho (D0).

A estrutura desregistre automaticamente cada instância do provedor quando o dispositivo da instância é removido (e antes de chamar a função de retorno de chamada de evento EvtDeviceSelfManagedIoCleanup ). Para obter informações sobre a ordem na qual a estrutura chama as funções de retorno de chamada de um driver, consulte Cenários de gerenciamento de energia e PnP.

Seu driver pode cancelar o registro de uma instância a qualquer momento chamando WdfWmiInstanceDeregister.