Поделиться через


структура WNODE_HEADER (wmistr.h)

Структура WNODE_HEADER является первым элементом всех остальных структур WNODE_XXX . Он содержит информацию, общую для всех таких структур.

Синтаксис

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;

Члены

BufferSize

Этот член задает размер непагрегированного буфера в байтах для получения возвращаемых данных WNODE_XXX, включая эту WNODE_HEADER структуру, дополнительные элементы структуры WNODE_XXX типа, указанного флагами, и все данные, определяемые WMI или драйвером, которые сопровождают эту структуру.

ProviderId

Если для параметра Flags задано значение WNODE_FLAG_EVENT_ITEM или WNODE_FLAG_EVENT_REFERENCE, значение ProviderId должно содержать идентификатор поставщика WMI, связанного с объектом устройства. Значение ProviderId можно получить, вызвав IoWMIDeviceObjectToProviderId. Если параметру Flags присвоено любое другое значение, этот элемент зарезервирован.

DUMMYUNIONNAME

DUMMYUNIONNAME.HistoricalContext

Этот член сохраняет дескриптор в сеансе трассировки событий.

DUMMYUNIONNAME.DUMMYSTRUCTNAME

DUMMYUNIONNAME.DUMMYSTRUCTNAME.Version

Этот член зарезервирован для WMI.

DUMMYUNIONNAME.DUMMYSTRUCTNAME.Linkage

Этот член зарезервирован для WMI.

DUMMYUNIONNAME2

DUMMYUNIONNAME2.CountLost

Зарезервировано

DUMMYUNIONNAME2.KernelHandle

Этот член зарезервирован для WMI.

DUMMYUNIONNAME2.TimeStamp

Этот элемент указывает время сбора драйвером данных WNODE_XXX . Это значение времени выражается в абсолютном формате системного времени. Абсолютное системное время — это число 100-наносекундных интервалов с начала 1601 года в григорианском календаре. Драйвер может вызвать KeQuerySystemTime , чтобы получить это значение. Если блок должен быть записан в файл журнала (WNODE_FLAG_LOG_WNODE), драйвер NT также может задать WNODE_FLAG_USE_TIMESTAMP в разделе Флаги , чтобы запросить, чтобы средство ведения журнала системы оставило значение TimeStamp без изменений.

Guid

Этот элемент указывает GUID, представляющий блок данных, связанный с возвращаемым WNODE_XXX .

ClientContext

Этот член сохраняет тип часов для сеанса. Возможные значения приведены в следующей таблице.

Значение Описание
1 Значение счетчика производительности (также называемое QPC, QueryPerformanceCounter или PerfCounter)
2 Системный таймер
3 Цикл ЦП

Flags

Этот элемент указывает тип структуры WNODE_XXX , содержащей структуру WNODE_HEADER:

WNODE_FLAG_ALL_DATA

Остальная часть структуры WNODE_ALL_DATA соответствует структуре WNODE_HEADER в буфере.

WMI задает этот флаг в структуре WNODE_HEADER , которую он передает с IRP_MN_QUERY_ALL_DATA запросом.

Драйвер устанавливает этот флаг в WNODE_HEADER структуре события, состоящего из всех экземпляров блока данных. Если размер блока данных одинаков для всех экземпляров, драйвер также задает WNODE_FLAG_FIXED_INSTANCE_SIZE.

WNODE_FLAG_EVENT_ITEM

Драйвер устанавливает этот флаг, чтобы указать, что структура WNODE_XXX была создана как событие. Этот флаг действителен, только если задано WNODE_FLAG_ALL_DATA, WNODE_FLAG_SINGLE_INSTANCE или WNODE_FLAG_SINGLE_ITEM.

WNODE_FLAG_EVENT_REFERENCE

Остальная часть структуры WNODE_EVENT_REFERENCE соответствует структуре WNODE_HEADER в буфере.

Драйвер устанавливает этот флаг при создании события, превышающего максимальный размер, указанный в реестре для события. WMI использует сведения в структуре WNODE_EVENT_REFERENCE для запроса данных события и планирует такой запрос в соответствии со значением WNODE_FLAG_SEVERITY_MASK.

WNODE_FLAG_METHOD_ITEM

Остальная часть структуры WNODE_METHOD_ITEM соответствует структуре WNODE_HEADER в буфере.

WMI задает этот флаг в структуре WNODE_HEADER , которую он передает с IRP_MN_EXECUTE_METHOD запросом.

WNODE_FLAG_SINGLE_INSTANCE

Остальная часть структуры WNODE_SINGLE_INSTANCE соответствует структуре WNODE_HEADER в буфере.

WMI задает этот флаг в структуре WNODE_HEADER , которую он передает с запросом на запрос или изменение экземпляра.

Драйвер задает этот флаг в структуре WNODE_HEADER события, состоящего из одного экземпляра блока данных.

WNODE_FLAG_SINGLE_ITEM

Остальная часть структуры WNODE_SINGLE_INSTANCE соответствует структуре WNODE_HEADER в буфере.

WMI задает этот флаг в структуре WNODE_HEADER , которую он передает с запросом на изменение элемента.

Драйвер задает этот флаг в структуре WNODE_HEADER события, состоящего из одного элемента данных.

WNODE_FLAG_TOO_SMALL

Остальная часть структуры WNODE_TOO_SMALL соответствует структуре WNODE_HEADER в буфере.

Драйвер устанавливает этот флаг, когда передает структуру WNODE_TOO_SMALL , указывая, что буфер слишком мал для возврата всех данных WNODE_XXX .

Кроме того, для флагов можно задать один или несколько следующих флагов, которые предоставляют дополнительные сведения о WNODE_XXX:

WNODE_FLAG_FIXED_INSTANCE_SIZE

Все экземпляры блока данных имеют одинаковый размер. Этот флаг действителен только в том случае, если также задано WNODE_FLAG_ALL_DATA.

WNODE_FLAG_INSTANCES_SAME

Количество экземпляров и имена динамических экземпляров в возвращаемой WNODE_ALL_DATA структуре идентичны именам, возвращенным из предыдущего запроса WNODE_ALL_DATA . Этот флаг действителен только в том случае, если также задано WNODE_FLAG_ALL_DATA. Этот флаг игнорируется для блоков данных, зарегистрированных со статическими именами экземпляров.

Для оптимизации производительности драйвер должен установить этот флаг, если он может отслеживать изменения в количестве или именах блоков данных. Затем WMI может пропустить обработку, необходимую для обнаружения и обновления имен динамических экземпляров.

WNODE_FLAG_STATIC_INSTANCE_NAMES

Возвращаемые данные WNODE_XXX не включают имена экземпляров.

WMI устанавливает этот флаг перед запросом данных WNODE_XXX для блоков данных, зарегистрированных со статическими именами экземпляров. После получения возвращенного WNODE_XXX от драйвера WMI заполняет имена статических экземпляров, указанные при регистрации, перед передачей возвращенного WNODE_XXX потребителю данных.

WNODE_FLAG_PDO_INSTANCE_NAMES

Статические имена экземпляров основаны на идентификаторе экземпляра устройства PDO для устройства. Драйвер запрашивает такие имена, задав WMIREG_FLAG_INSTANCE_PDO в WMIREGGUID , который он использует для регистрации блока.

WMI устанавливает этот флаг перед запросом данных WNODE_XXX для блоков данных, зарегистрированных с именами экземпляров на основе PDO.

WNODE_FLAG_SEVERITY_MASK

Определяемый драйвером уровень серьезности события, связанного с возвращенным WNODE_EVENT_REFERENCE, при этом 0x00 указывает на наименее серьезный уровень, а 0xff — самый серьезный уровень.

WMI использует значение этого флага для определения приоритета запросов к данным события.

WNODE_FLAG_USE_TIMESTAMP

Средство ведения журнала системы не должно изменять значение TimeStamp, заданное драйвером.

Драйвер NT также может задать для флагов одно или несколько из следующих значений для записи блоков событий в файл системного журнала:

WNODE_FLAG_LOG_WNODE

Блок событий отправляется в средство ведения журнала системы. Заголовок события является стандартной структурой WNODE_HEADER . Если драйвер очищает WNODE_FLAG_TRACED_GUID, блок также будет отправлен в WMI для доставки всем потребителям данных, которые включили событие. Драйвер должен выделить WNODE_XXX из памяти пула. WMI освобождает память после доставки события потребителям данных.

WNODE_FLAG_TRACED_GUID

Блок событий отправляется только в средство ведения журнала системы. Он не отправляется потребителям данных WMI. Заголовок события представляет собой EVENT_TRACE_HEADER структуру, объявленную в Evntrace.h, а не WNODE_HEADER. Драйвер должен выделить память для WNODE_XXX и освободить ее после возврата IoWMIWriteEvent . Драйвер может выделить такую память либо из стека, либо, чтобы свести к минимуму затраты на выделение и освобождение памяти, из локального хранилища потока драйвера, если драйвер создает и обслуживает собственный пул потоков.

WNODE_FLAG_USE_GUID_PTR

Член GUID указывает на GUID в памяти, а не содержит сам GUID. Средство системного ведения журнала разыменовывает указатель перед передачей данных потребителю. Этот флаг действителен, только если заданы WNODE_FLAG_LOG_WNODE или WNODE_FLAG_TRACED_GUID.

WNODE_FLAG_USE_MOF_PTR

Данные, следующие за фиксированными элементами структуры WNODE_XXX, состоят из массива MOF_FIELD структур, определенных в Evntrace.h, которые содержат указатели на данные и размеры, а не сами данные. Массив может содержать до MAX_MOF_FIELD элементов. Средство ведения журнала системы разыменовывает указатели перед передачей данных потребителю Этот флаг действителен только для блоков, зарегистрированных с помощью WMIREG_FLAG_TRACED_GUID.

Комментарии

В запросе IRP_MN_CHANGE_XXX или IRP_MN_EXECUTE_METHODbufferSize в IRP указывает максимальный размер выходного буфера в байтах, а BufferSize во входном WNODE_HEADER для такого запроса указывает размер входных данных в байтах в буфере.

Требования

Требование Значение
Заголовок wmistr.h (включая Wmistr.h)

См. также раздел

IoWMIDeviceObjectToProviderId

IoWMIWriteEvent

KeQuerySystemTime

WNODE_ALL_DATA

WNODE_EVENT_ITEM

WNODE_EVENT_REFERENCE

WNODE_METHOD_ITEM

WNODE_SINGLE_INSTANCE

WNODE_SINGLE_ITEM

WNODE_TOO_SMALL