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


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

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

Синтаксис

NTSYSAPI ULONG DbgPrintEx(
  [in] ULONG ComponentId,
  [in] ULONG Level,
  [in] PCSTR Format,
       ...   
);

Параметры

[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. Подпрограмма DbgPrintEx не поддерживает типы с плавающей запятой (%f, %e, %E, %g, %G, %a или %A).

...

Задает аргументы для строки формата, как в printf.

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

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

Комментарии

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

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

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

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

Нет верхнего ограничения на размер строки Format или количество аргументов. Однако любой один вызов DbgPrintEx будет передавать только 512 байт информации. Существует также ограничение на размер буфера DbgPrint. Дополнительные сведения см. в разделе Буфер DbgPrint и отладчик .

Требования

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

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

DbgPrint

KdPrint

KdPrintEx

vDbgPrintEx