Функция 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 |