Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этом разделе описываются расширения WMI для WDM (поддерживается Windows 2000 и более поздних версий), которые драйверы режима ядра, как поставщики сведений, могут использовать для предоставления информации потребителям информации. Драйверы обычно предоставляют сведения о том, что потребитель использует для определения конфигурации и использования ресурсов драйвера. Помимо расширений WMI для WDM, API пользовательского режима поддерживает поставщиков или потребителей сведений о событиях WMI. Дополнительные сведения см. в пакете SDK для Windows.
Средство ведения журнала трассировки событий поддерживает до 32 экземпляров. Один из экземпляров выделен для трассировки ядра. Средство ведения журнала поддерживает трассировку высокой частоты событий.
События трассировки определяются таким же образом, как и другие события WMI. События WMI описаны в MOF-файле. Дополнительные сведения о описаниях событий WMI см. в разделе "Синтаксис MOF" для данных WMI и блоков событий.
Процесс, с помощью которого сведения журнала драйверов в режиме ядра интегрируются в существующую инфраструктуру WMI. Чтобы регистрировать события трассировки, драйвер выполняет следующее:
Зарегистрируйтесь как поставщик WMI, вызвав IoWMIRegistrationControl.
Пометьте события как отслеживаемые, задав WMIREG_FLAG_TRACED_GUID в члене Flags структуры WMIREGGUID, передаваемой при регистрации события драйвера в WMI.
Укажите одно событие в качестве события элемента управления для общего включения или отключения набора событий трассировки, задав WMIREG_FLAG_TRACE_CONTROL_GUID в элементе Flags структуры WMIREGGUID , передаваемой при регистрации событий драйвера с помощью WMI.
Получив запрос от WMI на включение событий, если GUID совпадает с GUID управляющего элемента трассировки, драйвер должен сохранить дескриптор регистратора. Значение понадобится при написании события. Сведения о том, как использовать этот дескриптор, см. на шаге 6. Значение дескриптора журнала содержится в элементе HistoricalContextWNODE_HEADER, части буфера WMI, который является частью параметров запроса на включение событий.
Определите, будет ли событие трассировки отправлено потребителям событий WMI или предназначено только для средства ведения журнала событий WMI. Это позволит определить, откуда должна поступать память для структуры EVENT_TRACE_HEADER . Эта память в конечном итоге будет передана в IoWMIWriteEvent.
Если событие является только событием журнала, память не будет удалена WMI. В этом случае драйвер должен передать буфер в стеке или повторно использовать выделенный буфер для этой цели. По соображениям производительности драйвер должен свести к минимуму любые ненужные вызовы, чтобы выделить или освободить память. Неисполнение этой рекомендации будет скомпрометировать целостность сведений о времени, содержащихся в файле журнала.
Если событие отправляется как в средство ведения журнала, так и в потребители событий WMI, то память должна быть выделена из непагрегированного пула. В этом случае событие будет отправлено средству ведения журнала, а затем перенаправлялось в WMI, чтобы отправляться потребителям событий WMI, которые запрашивали уведомление о событии. Затем память для события будет освобождена WMI в соответствии с правилами работы IoWMIWriteEvent.
После защиты памяти для EVENT_TRACE_HEADER и любых данных событий драйвера, если таковые имеются, необходимо задать следующие сведения:
Задайте для элемента Size значение sizeof(EVENT_TRACE_HEADER) плюс размер любых дополнительных данных событий драйвера, которые будут добавлены в конец EVENT_TRACE_HEADER.
Задайте для элемента Flags значение WNODE_FLAG_TRACED_GUID, чтобы событие было отправлено средству ведения журнала. Если событие также должно быть отправлено другим потребителям событий WMI, задайте WNODE_FLAG_LOG_WNODE. Обратите внимание, что при настройке WNODE_FLAG_LOG_WNODE не требуется задать WNODE_FLAG_TRACED_GUID. Если оба заданы, WNODE_FLAG_TRACED_GUID будет иметь приоритет, и событие не будет отправлено потребителям событий WMI.
Задайте Guid или член GuidPtr. Если вы используете GuidPtr, задайте WNODE_FLAG_USE_GUID_PTR в элементе Flags.
При необходимости укажите значение для TimeStamp. Если драйвер не задает значение TimeStamp , средство ведения журнала заполняет это значение. Если драйвер не хочет, чтобы логгер установил метку времени, он должен установить флаг WNODE_FLAG_USE_TIMESTAMP в члене Flags.
Задайте любой из следующих элементов EVENT_TRACE_HEADER, которые имеют значение для драйвера: Class.Type, Class.Level и Class.Version.
Наконец, приведите EVENT_TRACE_HEADER к типу WNODE_HEADER и установите значение HistoricalContextWnode на дескриптор регистратора, сохраненный на шаге 4 выше.
Вызовите IoWMIWriteEvent, указав указатель на структуру EVENT_TRACE_HEADER.
Драйвер должен продолжать регистрировать события трассировки, связанные с GUID элемента управления, пока драйвер не получит уведомление об отключении ведения журнала событий с помощью запроса IRP_MN_DISABLE_EVENTS .