Compartir a través de


Compatibilidad con eventos y bloques de datos de WMI en el controlador

[Solo se aplica a KMDF]

Los controladores basados en marcos admiten bloques de datos WMI proporcionando funciones de devolución de llamada de eventos. Los controladores admiten eventos WMI llamando a un método de objeto que envía un evento a los clientes WMI.

Compatibilidad con bloques de datos WMI de lectura y escritura

Si los clientes WMI pueden leer y escribir la información de un bloque de datos WMI, el controlador debe proporcionar una función de devolución de llamada EvtWmiInstanceQueryInstance que atiende las solicitudes de lectura de un cliente, además de EvtWmiInstanceSetInstance o EvtWmiInstanceSetItem funciones de devolución de llamada (o ambas) que atiende las solicitudes de escritura de un cliente.

Si el bloque de datos contiene métodos que el controlador ejecuta en la solicitud del cliente, el controlador también debe proporcionar una función de devolución de llamada EvtWmiInstanceExecuteMethod .

Si un bloque de datos WMI es de solo escritura (es decir, los clientes WMI pueden escribir información en el bloque de datos pero no pueden leer el bloque de datos), el controlador no proporciona una función de devolución de llamada EvtWmiInstanceQueryInstance .

Compatibilidad con bloques de datos WMI de Read-Only

Si un cliente WMI no puede modificar la información de un bloque de datos WMI, el controlador no proporciona funciones de devolución de llamada EvtWmiInstanceSetInstance o EvtWmiInstanceSetItem . Para admitir solicitudes de información del bloque de datos de clientes WMI, el controlador puede hacer cualquiera de las siguientes acciones:

  • Proporcione una función de devolución de llamada EvtWmiInstanceQueryInstance para copiar los datos proporcionados por el controlador en un búfer proporcionado por WMI.

  • Almacene la información del bloque de datos en el espacio de contexto del objeto de instancia de WMI y establezca el miembro UseContextForQuery de la estructura WDF_WMI_INSTANCE_CONFIG de la instancia en TRUE.

Si el controlador establece UseContextForQuery en TRUE, el marco copia el espacio de contexto del objeto de instancia en un búfer proporcionado por WMI cuando un cliente WMI solicita la información de la instancia. No se requieren devoluciones de llamada EvtWmiInstanceXxx si el controlador solo tiene una única instancia de WMI que proporciona datos de solo lectura y longitud fija desde su área de contexto de objeto.

Si un bloque de datos de solo lectura contiene métodos que el controlador ejecuta en la solicitud del cliente, el controlador también puede proporcionar una función de devolución de llamada EvtWmiInstanceExecuteMethod .

Compatibilidad con bloques de datos WMI costosos

Si el controlador recopila cantidades relativamente grandes de datos dinámicos para admitir uno de sus bloques de datos WMI, el controlador debe hacer lo siguiente:

  • Declare el bloque de datos para que sea "caro" estableciendo la marca WdfWmiProviderExpensive en el miembro Flags del objeto de proveedor WMI WDF_WMI_PROVIDER_CONFIG estructura.

  • Proporcione una función de devolución de llamada EvtWmiProviderFunctionControl que habilite y deshabilite la recopilación de datos para el bloque de datos, o llame a WdfWmiProviderIsEnabled para determinar si el controlador debe habilitar o deshabilitar la recopilación de datos.

Si el controlador establece la marca WdfWmiProviderExpensive , el marco llama a la función de devolución de llamada EvtWmiProviderFunctionControl cuando un cliente WMI se registra para acceder al bloque de datos. La función de devolución de llamada debe habilitar la capacidad del controlador para recopilar datos. Si todos los clientes WMI quitan sus registros para el bloque de datos, el marco llama de nuevo a la función de devolución de llamada EvtWmiProviderFunctionControl para que el controlador pueda dejar de recopilar datos.

Compatibilidad con eventos WMI

Un controlador puede usar eventos WMI para notificar a los clientes WMI condiciones excepcionales. (No debe usar eventos WMI como alternativa al registro de errores). Al igual que los elementos de datos, los eventos WMI se definen en bloques de datos WMI dentro de archivos de formato de objeto administrado (.mof).

Los clientes WMI se registran para recibir notificaciones de eventos WMI. Para enviar un evento a los clientes WMI registrados, el controlador llama al método WdfWmiInstanceFireEvent . Este método permite al controlador enviar opcionalmente datos específicos del evento a los clientes.

Si el bloque de datos WMI que define el evento también contiene elementos de datos de WMI o elementos de método, el controlador proporciona las funciones de devolución de llamada WMI adecuadas. Si un bloque de datos define un evento pero no contiene datos ni elementos de método, el controlador debe establecer la marca WdfWmiProviderEventOnly en el miembro Flags del WDF_WMI_PROVIDER_CONFIG del objeto de proveedor WMI.

El controlador debe llamar a WdfWmiInstanceFireEvent solo si un cliente WMI se ha registrado para la notificación de eventos. El controlador puede determinar si debe llamar a WdfWmiInstanceFireEvent proporcionando una función de devolución de llamada EvtWmiProviderFunctionControl o llamando a WdfWmiProviderIsEnabled.

Compatibilidad con el seguimiento de eventos WMI

Los eventos de seguimiento se definen en archivos .mof, de la misma manera que otros eventos WMI. Cuando el controlador crea un objeto de proveedor WMI para un evento de seguimiento, debe establecer la marca WdfWmiProviderTracing en el miembro Flags de la estructura WDF_WMI_PROVIDER_CONFIG del objeto de proveedor.

Una vez registrada una instancia del proveedor, el controlador puede llamar a WdfWmiProviderGetTracingHandle para obtener un identificador de seguimiento. El controlador puede usar el identificador de seguimiento como entrada para la rutina WmiTraceMessage .

Para obtener más información sobre el seguimiento de eventos, consulte: