Inizializzazione del supporto WMI nel driver

[Si applica solo a KMDF]

Per supportare blocchi di dati WMI, un driver basato su framework:

  • Registra i nomi delle risorse MOF (Managed Object Format) di tutti i provider di dati WMI personalizzati non definiti in Wmicore.mof.

  • Crea uno o più oggetti di istanza WMI per rappresentare i blocchi di dati che può leggere o scrivere.

  • Facoltativamente implementa una o più funzioni di callback eventi per fornire i dati WMI forniti dal driver.

  • Registrare ogni oggetto istanza WMI per renderlo disponibile per i client WMI.

Per inizializzare il supporto WMI, un driver KMDF segue questa procedura, in genere all'interno del proprio callback EvtDriverDeviceAdd o EvtDeviceSelfManagedIoInit callback:

  1. Un driver che fornisce un file MOF per supportare provider di dati WMI personalizzati deve chiamare il metodo WdfDeviceAssignMofResourceName per registrare un nome di risorsa MOF prima che il driver crei oggetti provider WMI che rappresentano il provider di dati.

  2. Inizializzare una struttura di configurazione del provider WMI e creare facoltativamente un oggetto provider WMI (WDFWMIPROVIDER).

  3. Inizializzare una struttura di configurazione dell'istanza WMI e creare un oggetto istanza WMI (WDFWMIINSTANCE).

Il framework crea un provider WMI per impostazione predefinita quando un driver KMDF crea la prima istanza WMI. Pertanto, se il driver richiede un solo provider WMI, non è necessario chiamare il metodo di creazione del provider (WdfWmiProviderCreate). Tuttavia, il driver deve compilare la struttura di configurazione del provider perché questa struttura fornisce informazioni sul provider usato dal framework quando crea l'istanza.

Se il driver crea una singola istanza di ogni blocco di dati WMI supportato, il driver chiama WdfWmiInstanceCreate, passando una struttura WDF_WMI_PROVIDER_CONFIG e una struttura WDF_WMI_INSTANCE_CONFIG. Questa singola chiamata configura sia l'oggetto provider WMI fornito dal framework singolo che crea un oggetto istanza WMI.

Se il driver crea più istanze dei blocchi di dati WMI, il driver deve chiamare sia WdfWmiProviderCreate che WdfWmiInstanceCreate

Registrazione delle istanze del provider

Prima che i client WMI possano accedere ai blocchi di dati WMI del driver, il driver deve registrare le istanze del provider con il servizio WMI del sistema. Il driver può usare una delle tecniche seguenti per registrare un'istanza del provider:

  • Impostare il membro Register dell'istanza del provider WDF_WMI_INSTANCE_CONFIG struttura su TRUE.

    Se il driver imposta Register su TRUE, il framework registra automaticamente l'istanza la prima volta che il dispositivo entra nello stato di lavoro (D0).

  • Chiamare il metodo WdfWmiInstanceRegister .

    Se il driver chiama WdfWmiInstanceRegister dopo aver chiamato WdfWmiInstanceCreate, il framework registra l'istanza dopo che il dispositivo si trova nello stato di lavoro (D0).

Il framework deregista automaticamente ogni istanza del provider quando il dispositivo dell'istanza viene rimosso e prima di chiamare la funzione di callback dell'evento EvtDeviceSelfManagedIoCleanup . Per informazioni sull'ordine in cui il framework chiama le funzioni di callback di un driver, vedere Scenari di PnP e Power Management.

Il driver può annullare la registrazione di un'istanza in qualsiasi momento chiamando WdfWmiInstanceDeregister.