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


Функция vDbgPrintEx (wdm.h)

Подпрограмма vDbgPrintEx отправляет строку отладчику ядра при соблюдении определенных условий.

Синтаксис

NTSYSAPI ULONG vDbgPrintEx(
  [in] ULONG   ComponentId,
  [in] ULONG   Level,
  [in] PCCH    Format,
  [in] va_list arglist
);

Параметры

[in] ComponentId

Компонент, вызывающий эту подпрограмму. Этот параметр должен быть одним из идентификаторов фильтров имен компонентов, определенных в Dpfilter.h. Чтобы избежать смешивания выходных данных драйвера с выходными данными компонентов Windows, следует использовать только следующие значения для ComponentId:

  • DPFLTR_IHVVIDEO_ID
  • DPFLTR_IHVAUDIO_ID
  • DPFLTR_IHVNETWORK_ID
  • DPFLTR_IHVSTREAMING_ID
  • DPFLTR_IHVBUS_ID
  • DPFLTR_IHVDRIVER_ID

[in] Level

Серьезность отправляемого сообщения. Этот параметр может быть любым 32-разрядным целым числом. Значения от 0 до 31 (включительно) обрабатываются иначе, чем значения от 32 до 0xFFFFFFFF. Дополнительные сведения о том, как обрабатываются значения, см. в разделе Чтение и фильтрация сообщений отладки.

[in] Format

Указатель на строку формата для печати. Строка format поддерживает большинство кодов форматирования в стиле printf. Однако коды формата Юникода (%C, %S, %lc, %ls, %wc, %ws и %wZ) можно использовать только с IRQL = PASSIVE_LEVEL. Подпрограмма vDbgPrintEx не поддерживает типы с плавающей запятой (%f, %e, %E, %g, %G, %a или %A).

[in] arglist

Список аргументов для строки формата. Подпрограмма vDbgPrintEx использует этот список так же, как vprintf .

Возвращаемое значение

vDbgPrintEx возвращает STATUS_SUCCESS, если операция выполнена успешно. В противном случае эта подпрограмма возвращает соответствующий код ошибки.

Комментарии

Только драйверы в режиме ядра могут вызывать подпрограмму vDbgPrintEx .

VDbgPrintEx можно вызвать по адресу IRQL <= DIRQL. Однако коды формата Юникода (%wc и %ws) можно использовать только в irQL = PASSIVE_LEVEL. Кроме того, поскольку отладчик использует межпроцессные прерывания (IPIs) для взаимодействия с другими процессорами, вызов vDbgPrintEx в IRQL > DIRQL может привести к взаимоблокировкам.

vDbgPrintEx либо передает созданную строку отладчику ядра, либо ничего не делает в зависимости от значений ComponentId, Level и соответствующих масок фильтра компонента. Дополнительные сведения о том, что делает vDbgPrintEx , см. в разделе Чтение и фильтрация сообщений отладки.

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

Не существует верхнего предела для размера строки format или количества аргументов в списке arglist . Однако при одном вызове vDbgPrintEx будет передаваться только 512 байт информации.

Существует также ограничение на размер буфера, используемого отладчиком. Дополнительные сведения об этом ограничении см. в разделе Буфер DbgPrint и отладчик.

Эта подпрограмма определена в Wdm.h. Идентификаторы фильтров компонентов определяются в Dpfilter.h.

Требования

Требование Значение
Минимальная версия клиента Доступно в Microsoft Windows XP и более поздних версиях операционной системы.
Целевая платформа Универсальное
Верхняя часть wdm.h (включая Dpfilter.h, Wdm.h, Ntddk.h, Ndis.h)
Библиотека NtDll.lib (пользовательский режим); NtosKrnl.lib (режим ядра)
DLL NtDll.dll (пользовательский режим); NtosKrnl.exe (режим ядра)
IRQL <= DIRQL (см. раздел Комментарии)

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

DbgPrintEx