Inicialización de la compatibilidad con WMI en el controlador

[Solo se aplica a KMDF]

Para admitir bloques de datos WMI, un controlador basado en marcos:

  • Registra los nombres de recursos de formato de objeto administrado (MOF) de los proveedores de datos WMI personalizados que no están definidos en Wmicore.mof.

  • Crea uno o varios objetos de instancia de WMI para representar los bloques de datos que puede leer o escribir.

  • Opcionalmente, implementa una o varias funciones de devolución de llamada de eventos para proporcionar los datos WMI que proporciona el controlador.

  • Registre cada objeto de instancia de WMI para que esté disponible para los clientes WMI.

Para inicializar su compatibilidad con WMI, un controlador KMDF sigue estos pasos, normalmente dentro de su devolución de llamada EvtDriverDeviceAdd o EvtDeviceSelfManagedIoInit :

  1. Un controlador que proporciona un archivo MOF para admitir proveedores de datos WMI personalizados debe llamar al método WdfDeviceAssignMofResourceName para registrar un nombre de recurso MOF antes de que el controlador cree objetos de proveedor WMI que representen el proveedor de datos.

  2. Inicialice una estructura de configuración del proveedor WMI y, opcionalmente, cree un objeto de proveedor WMI (WDFWMIPROVIDER).

  3. Inicialice una estructura de configuración de instancia de WMI y cree un objeto de instancia de WMI (WDFWMIINSTANCE).

El marco crea un proveedor WMI de forma predeterminada cuando un controlador KMDF crea su primera instancia de WMI. Por lo tanto, si el controlador solo requiere un proveedor WMI, no es necesario llamar al método de creación del proveedor (WdfWmiProviderCreate). Sin embargo, el controlador debe rellenar la estructura de configuración del proveedor porque esta estructura proporciona información sobre el proveedor que usa el marco cuando crea la instancia.

Si el controlador crea una única instancia de cada bloque de datos WMI que admite, el controlador llama a WdfWmiInstanceCreate, pasando una estructura de WDF_WMI_PROVIDER_CONFIG y una estructura de WDF_WMI_INSTANCE_CONFIG . Esta llamada única configura el objeto de proveedor WMI proporcionado por el marco único y crea un objeto de instancia de WMI.

Si el controlador crea varias instancias de sus bloques de datos WMI, el controlador debe llamar a WdfWmiProviderCreate y WdfWmiInstanceCreate.

Registro de instancias de proveedor

Para que los clientes WMI puedan acceder a los bloques de datos WMI del controlador, el controlador debe registrar sus instancias de proveedor con el servicio WMI del sistema. El controlador puede usar cualquiera de las técnicas siguientes para registrar una instancia de proveedor:

  • Establezca el miembro Register de la estructura WDF_WMI_INSTANCE_CONFIG de la instancia del proveedor en TRUE.

    Si el controlador establece Register en TRUE, el marco registra automáticamente la instancia la primera vez que el dispositivo entra en su estado de funcionamiento (D0).

  • Llame al método WdfWmiInstanceRegister .

    Si el controlador llama a WdfWmiInstanceRegister después de llamar a WdfWmiInstanceCreate, el marco registra la instancia después de que el dispositivo esté en estado de funcionamiento (D0).

El marco anula automáticamente el registro de cada instancia del proveedor cuando se quita el dispositivo de la instancia (y antes de llamar a la función de devolución de llamada de eventos EvtDeviceSelfManagedIoCleanup ). Para obtener información sobre el orden en que el marco llama a las funciones de devolución de llamada de un controlador, consulte Escenarios de administración de energía y PnP.

El controlador puede anular el registro de una instancia en cualquier momento llamando a WdfWmiInstanceDeregister.