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


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

Подпрограмма IoAllocateErrorLogEntry выделяет запись журнала ошибок и возвращает указатель на пакет, который вызывающий объект использует для предоставления сведений об ошибке ввода-вывода.

Синтаксис

PVOID IoAllocateErrorLogEntry(
  [in] PVOID IoObject,
  [in] UCHAR EntrySize
);

Параметры

[in] IoObject

Указатель на объект устройства, представляющий устройство, на котором произошла ошибка ввода-вывода, или на объект драйвера, представляющий драйвер, который обнаружил ошибку.

[in] EntrySize

Указывает размер выделенной записи журнала ошибок (в байтах). Это значение не может превышать ERROR_LOG_MAXIMUM_SIZE.

Предупреждение

EntrySize — это значение UCHAR . Если указать большее значение, компилятор автоматически усечит это значение до (неправильного) UCHAR.

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

IoAllocateErrorLogEntry возвращает указатель на запись журнала ошибок или значение NULL , если запись журнала не может быть выделена.

Комментарии

Драйвер должен сначала заполнить пакет сведениями об ошибке, а затем вызвать IoWriteErrorLogEntry , чтобы опубликовать запись в журнале ошибок. Буфер записи журнала ошибок автоматически освобождается после записи журнала. Буферы записи, которые не будут записываться в журнал, можно освободить с помощью IoFreeErrorLogEntry.

Запись журнала ошибок состоит из структуры IO_ERROR_LOG_PACKET переменной длины, за которой, возможно, следуют одна или несколько строк Юникода с нулевым подсчетом. Просмотр событий вставляет эти строки в сообщение об ошибке, которое отображается для записи. IO_ERROR_LOG_PACKET содержит один элемент переменной длины , элемент DumpData . Таким образом, значение entrySize должно быть sizeof(IO_ERROR_LOG_PACKET) + размер члена DumpData + комбинированный размер любых строк вставки, предоставленных драйвером.

Перед вызовом IoAllocateErrorLogEntry драйверы должны проверка, что значение параметра EntrySize меньше ERROR_LOG_MAXIMUM_SIZE. Так как EntrySize объявляется как UCHAR, а компилятор автоматически усекает любое значение, слишком большое, чтобы поместиться в UCHAR, сама подпрограмма не может надежно определить, является ли переданное значение слишком большим.

Драйверы не должны рассматривать IoAllocateErrorLogEntry , возвращая значение NULL , как неустранимая ошибка. Драйвер должен продолжать работать нормально, независимо от того, может ли он регистрировать ошибки.

Требования

Требование Значение
Целевая платформа Универсальное
Верхняя часть wdm.h (включая Wdm.h, Ntddk.h, Ntifs.h)
Библиотека NtosKrnl.lib
DLL NtosKrnl.exe
IRQL IRQL <= DISPATCH_LEVEL

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

IO_ERROR_LOG_PACKET

IoFreeErrorLogEntry

IoWriteErrorLogEntry