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


структура 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

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

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 в памяти, а не сам 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 (include 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