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) |