Функция 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 (см. раздел Комментарии) |