estructura WNODE_HEADER (wmistr.h)

La estructura WNODE_HEADER es el primer miembro de todas las demás estructuras WNODE_XXX . Contiene información común a todas estas estructuras.

Sintaxis

typedef struct _WNODE_HEADER {
  ULONG BufferSize;
  ULONG ProviderId;
  union {
    ULONG64 HistoricalContext;
    struct {
      ULONG Version;
      ULONG Linkage;
    } DUMMYSTRUCTNAME;
  } DUMMYUNIONNAME;
  union {
    ULONG         CountLost;
    HANDLE        KernelHandle;
    LARGE_INTEGER TimeStamp;
  } DUMMYUNIONNAME2;
  GUID  Guid;
  ULONG ClientContext;
  ULONG Flags;
} WNODE_HEADER, *PWNODE_HEADER;

Miembros

BufferSize

Este miembro especifica el tamaño, en bytes, del búfer no paginado para recibir los datos WNODE_XXX que se van a devolver, incluida esta estructura de WNODE_HEADER , miembros adicionales de una estructura WNODE_XXX del tipo indicado por Flags y los datos WMI o determinados por el controlador que acompañan a esa estructura.

ProviderId

Si Flags se establece en WNODE_FLAG_EVENT_ITEM o WNODE_FLAG_EVENT_REFERENCE, ProviderId debe contener el identificador del proveedor WMI asociado al objeto de dispositivo. Puede obtener el valor providerId llamando a IoWMIDeviceObjectToProviderId. Si Flags se establece en cualquier otro valor, este miembro está reservado.

DUMMYUNIONNAME

DUMMYUNIONNAME.HistoricalContext

Este miembro almacena el identificador en la sesión de seguimiento de eventos.

DUMMYUNIONNAME.DUMMYSTRUCTNAME

DUMMYUNIONNAME.DUMMYSTRUCTNAME.Version

Este miembro está reservado para WMI.

DUMMYUNIONNAME.DUMMYSTRUCTNAME.Linkage

Este miembro está reservado para WMI.

DUMMYUNIONNAME2

DUMMYUNIONNAME2.CountLost

Reservado

DUMMYUNIONNAME2.KernelHandle

Este miembro está reservado para WMI.

DUMMYUNIONNAME2.TimeStamp

Este miembro indica la hora en la que un controlador recopiló los datos WNODE_XXX . Este valor de hora se expresa en formato de hora del sistema absoluto. La hora absoluta del sistema es el número de intervalos de 100 nanosegundos desde el inicio del año 1601 en el calendario gregoriano. Un controlador puede llamar a KeQuerySystemTime para obtener este valor. Si el bloque se va a escribir en un archivo de registro (WNODE_FLAG_LOG_WNODE), un controlador NT también puede establecer WNODE_FLAG_USE_TIMESTAMP en Marcas para solicitar que el registrador del sistema deje el valor de TimeStamp sin cambios.

Guid

Este miembro indica el GUID que representa el bloque de datos asociado al WNODE_XXX que se va a devolver.

ClientContext

Este miembro almacena el tipo de reloj de la sesión. Los valores posibles se incluyen en la tabla siguiente.

Valor Descripción
1 Valor del contador de rendimiento (también denominado QPC, QueryPerformanceCounter o PerfCounter)
2 Temporizador del sistema
3 Ciclo de CPU

Flags

Este miembro indica el tipo de estructura WNODE_XXX que contiene la estructura WNODE_HEADER:

WNODE_FLAG_ALL_DATA

El resto de una estructura de WNODE_ALL_DATA sigue la estructura de WNODE_HEADER en el búfer.

WMI establece esta marca en la estructura WNODE_HEADER que pasa con una solicitud de IRP_MN_QUERY_ALL_DATA .

Un controlador establece esta marca en la estructura WNODE_HEADER de un evento que consta de todas las instancias de un bloque de datos. Si el tamaño del bloque de datos es idéntico para todas las instancias, un controlador también establece WNODE_FLAG_FIXED_INSTANCE_SIZE.

WNODE_FLAG_EVENT_ITEM

Un controlador establece esta marca para indicar que la estructura WNODE_XXX se generó como un evento. Esta marca solo es válida si también se establece WNODE_FLAG_ALL_DATA, WNODE_FLAG_SINGLE_INSTANCE o WNODE_FLAG_SINGLE_ITEM.

WNODE_FLAG_EVENT_REFERENCE

El resto de una estructura de WNODE_EVENT_REFERENCE sigue la estructura WNODE_HEADER en el búfer.

Un controlador establece esta marca cuando genera un evento mayor que el tamaño máximo especificado en el Registro para un evento. WMI usa la información de la estructura WNODE_EVENT_REFERENCE para solicitar los datos del evento y programa dicha solicitud según el valor de WNODE_FLAG_SEVERITY_MASK.

WNODE_FLAG_METHOD_ITEM

El resto de una estructura de WNODE_METHOD_ITEM sigue la estructura WNODE_HEADER en el búfer.

WMI establece esta marca en la estructura WNODE_HEADER que pasa con una solicitud de IRP_MN_EXECUTE_METHOD .

WNODE_FLAG_SINGLE_INSTANCE

El resto de una estructura de WNODE_SINGLE_INSTANCE sigue la estructura WNODE_HEADER en el búfer.

WMI establece esta marca en la estructura WNODE_HEADER que pasa con una solicitud para consultar o cambiar una instancia.

Un controlador establece esta marca en la estructura WNODE_HEADER de un evento que consta de una sola instancia de un bloque de datos.

WNODE_FLAG_SINGLE_ITEM

El resto de una estructura de WNODE_SINGLE_INSTANCE sigue la estructura WNODE_HEADER en el búfer.

WMI establece esta marca en la estructura WNODE_HEADER que pasa con una solicitud para cambiar un elemento.

Un controlador establece esta marca en la estructura WNODE_HEADER de un evento que consta de un único elemento de datos.

WNODE_FLAG_TOO_SMALL

El resto de una estructura de WNODE_TOO_SMALL sigue la estructura de WNODE_HEADER en el búfer.

Un controlador establece esta marca cuando pasa una estructura de WNODE_TOO_SMALL , lo que indica que el búfer es demasiado pequeño para que se devuelvan todos los datos WNODE_XXX .

Además, las marcas se pueden establecer con una o varias de las marcas siguientes que proporcionan información adicional sobre el WNODE_XXX:

WNODE_FLAG_FIXED_INSTANCE_SIZE

Todas las instancias de un bloque de datos tienen el mismo tamaño. Esta marca solo es válida si también se establece WNODE_FLAG_ALL_DATA.

WNODE_FLAG_INSTANCES_SAME

El número de instancias y los nombres de instancia dinámicos de una estructura de WNODE_ALL_DATA que se van a devolver son idénticos a los devueltos de la consulta WNODE_ALL_DATA anterior. Esta marca solo es válida si también se establece WNODE_FLAG_ALL_DATA. Esta marca se omite para los bloques de datos registrados con nombres de instancia estáticos.

Para optimizar el rendimiento, un controlador debe establecer esta marca si puede realizar un seguimiento de los cambios en el número o los nombres de sus bloques de datos. A continuación, WMI puede omitir el procesamiento necesario para detectar y actualizar nombres de instancia dinámicos.

WNODE_FLAG_STATIC_INSTANCE_NAMES

Los datos WNODE_XXX que se van a devolver no incluyen nombres de instancia.

WMI establece esta marca antes de solicitar datos WNODE_XXX para los bloques de datos registrados con nombres de instancia estáticos. Después de recibir el WNODE_XXX devuelto del controlador, WMI rellena los nombres de instancia estáticos especificados en el registro antes de pasar el WNODE_XXX devuelto a un consumidor de datos.

WNODE_FLAG_PDO_INSTANCE_NAMES

Los nombres de instancia estáticos se basan en el identificador de instancia de dispositivo del PDO para el dispositivo. Un controlador solicita estos nombres estableciendo WMIREG_FLAG_INSTANCE_PDO en el WMIREGGUID que usa para registrar el bloque.

WMI establece esta marca antes de solicitar datos WNODE_XXX para bloques de datos registrados con nombres de instancia basados en PDO.

WNODE_FLAG_SEVERITY_MASK

Nivel de gravedad determinado por el controlador del evento asociado a un WNODE_EVENT_REFERENCE devuelto, con 0x00 que indica el nivel menos grave y 0xff que indica el nivel más grave.

WMI usa el valor de esta marca para priorizar sus solicitudes de los datos del evento.

WNODE_FLAG_USE_TIMESTAMP

El registrador del sistema no debe modificar el valor de TimeStamp establecido por el controlador.

Un controlador NT también puede establecer marcas en uno o varios de los siguientes valores para que los bloques de eventos se escriban en un archivo de registro del sistema:

WNODE_FLAG_LOG_WNODE

Se va a enviar un bloque de eventos al registrador del sistema. El encabezado de evento es una estructura estándar WNODE_HEADER . Si el controlador borra WNODE_FLAG_TRACED_GUID, el bloque también se enviará a WMI para su entrega a los consumidores de datos que hayan habilitado el evento. El controlador debe asignar la WNODE_XXX de la memoria del grupo. WMI libera la memoria después de entregar el evento a los consumidores de datos.

WNODE_FLAG_TRACED_GUID

Un bloque de eventos solo se enviará al registrador del sistema. No se envía a los consumidores de datos de WMI. El encabezado del evento es una estructura EVENT_TRACE_HEADER , declarada en Evntrace.h, en lugar de un WNODE_HEADER. El controlador debe asignar memoria para la WNODE_XXX y liberarla después de que IoWMIWriteEvent devuelva. El controlador puede asignar dicha memoria desde la pila o, para minimizar la sobrecarga de asignar y liberar la memoria, desde el almacenamiento local del subproceso del controlador si el controlador crea y mantiene su propio grupo de subprocesos.

WNODE_FLAG_USE_GUID_PTR

El miembro GUID apunta a un GUID en memoria, en lugar de contener el propio GUID. El registrador del sistema desreferencia el puntero antes de pasar los datos al consumidor. Esta marca solo es válida si también se establecen WNODE_FLAG_LOG_WNODE o WNODE_FLAG_TRACED_GUID.

WNODE_FLAG_USE_MOF_PTR

Los datos que siguen a los miembros fijos de una estructura WNODE_XXX constan de una matriz de estructuras MOF_FIELD, definidas en Evntrace.h, que contienen punteros a datos y tamaños en lugar de los propios datos. La matriz puede contener hasta MAX_MOF_FIELD elementos. El registrador del sistema desreferencia los punteros antes de pasar los datos al consumidor Esta marca solo es válida para los bloques registrados con WMIREG_FLAG_TRACED_GUID.

Comentarios

En una solicitud IRP_MN_CHANGE_XXX o IRP_MN_EXECUTE_METHOD , BufferSize en el IRP indica el tamaño máximo en bytes del búfer de salida, mientras que BufferSize en el WNODE_HEADER de entrada para dicha solicitud indica el tamaño, en bytes, de los datos de entrada en el búfer.

Requisitos

Requisito Valor
Header wmistr.h (incluye Wmistr.h)

Consulte también

IoWMIDeviceObjectToProviderId

IoWMIWriteEvent

KeQuerySystemTime

WNODE_ALL_DATA

WNODE_EVENT_ITEM

WNODE_EVENT_REFERENCE

WNODE_METHOD_ITEM

WNODE_SINGLE_INSTANCE

WNODE_SINGLE_ITEM

WNODE_TOO_SMALL