Функция 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 + объединенный размер всех строк вставки, предоставленных драйвером.
Драйверы должны проверить, что значение EntrySize меньше ERROR_LOG_MAXIMUM_SIZE перед вызовом IoAllocateErrorLogEntry. Так как EntrySize объявляется как UCHAR, и компилятор автоматически усечит любое значение слишком большое, чтобы поместиться в UCHAR, подпрограмма сама не может надежно определить, является ли переданное значение слишком большим.
Драйверы не должны рассматривать IoAllocateErrorLogEntry возвращая NULL как неустранимая ошибка. Драйвер должен продолжать работать нормально, независимо от того, может ли он регистрировать ошибки.
Требования
Требование | Ценность |
---|---|
целевая платформа | Всеобщий |
заголовка | wdm.h (include Wdm.h, Ntddk.h, Ntifs.h) |
библиотеки | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | IRQL <= DISPATCH_LEVEL |