Запись в журнал системных событий
Ошибки задаются их значением NTSTATUS. Система предопределяет определенные значения NTSTATUS, которые могут использоваться драйверами, а средства записи драйверов могут определять дополнительные ошибки. Обратите внимание, что при ведении журнала ошибок можно использовать только определенные значения NTSTATUS.
Каждое значение NTSTATUS, которое может использоваться при ведении журнала ошибок, имеет связанное сообщение об ошибке. Например, драйвер параллельного порта использует значение NTSTATUS PAR_INTERRUPT_CONFLICT для представления конфликтов прерываний оборудования с текстом "Обнаружен конфликт прерывания для %1".
В Просмотр событий текст сообщения отображается в текстовом поле Описание на странице свойств записи журнала. Если текстовая строка сообщения содержит "%1", Просмотр событий заменяет ее именем устройства, которое зарегистрировал запись. Текст сообщения может содержать дополнительные параметры в формате "%2", "%3" и т. д. Когда драйвер регистрирует ошибку, он может предоставить строковые значения для этих параметров. Эти строковые значения называются строками вставки. Просмотр событий автоматически вставляет их вместо значений процентов.
Драйвер также может включать двоичные данные в запись журнала, известную как данные дампа. В Просмотр событий данные дампа отображаются в текстовом поле Данные на странице свойств записи журнала.
Вы можете открыть страницу свойств для записи журнала, дважды щелкнув запись в Просмотр событий. На следующем снимке экрана показан пример страницы свойств записи журнала.
Драйверы используют подпрограмму IoAllocateErrorLogEntry для выделения записи журнала ошибок. Записи журнала состоят из заголовка IO_ERROR_LOG_PACKET переменной длины, за которым следуют строки вставки.
На следующей схеме показан макет записи журнала ошибок в памяти.
Элемент ErrorCodeIO_ERROR_LOG_PACKET указывает значение NTSTATUS ошибки. Элемент DumpData указывает любые данные дампа для записи журнала. DumpData — это массив переменной величины, размер которого определяется членом DumpDataSize . Драйверы указывают начало первой строки вставки с помощью элемента StringOffset и количество строк в элементе NumberOfStrings . Каждая строка вставки сама по себе является строкой Юникода, завершаемой null.
После заполнения выделенной записи журнала ошибок драйвер записывает запись в журнал ошибок с помощью IoWriteErrorLogEntry. IoWriteErrorLogEntry автоматически освобождает память, выделенную для записи журнала. Драйверы могут использовать IoFreeErrorLogEntry для освобождения всех неиспользуемых записей журнала.
Предопределенные коды ошибок (в форме IO_ERR_XXX) определяются в файле заголовка ntiologc.h, который входит в состав комплекта драйверов Windows (WDK). Сообщение об ошибке, связанное с каждым кодом ошибки, можно найти в комментариях к ntiologc.h рядом с объявлением кода ошибки. Чтобы использовать предопределенный код ошибки, драйвер должен зарегистрировать системный файл, iologmsg.dll, в качестве источника связанных сообщений об ошибках. Дополнительные сведения см. в разделе Регистрация в качестве источника сообщений об ошибках.
Драйверы также могут определять собственные пользовательские типы ошибок и связанные с ними сообщения об ошибках. Дополнительные сведения см. в разделе Определение пользовательских типов ошибок.