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