IoAllocateErrorLogEntry 函数 (wdm.h)

IoAllocateErrorLogEntry 例程分配错误日志条目,并返回指向调用方用来提供有关 I/O 错误的信息的数据包的指针。

语法

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

参数

[in] IoObject

指向表示发生 I/O 错误的设备的设备对象的指针,或指向表示找到错误的驱动程序的驱动程序对象。

[in] EntrySize

指定要分配的错误日志项的大小(以字节为单位)。 此值不能超过ERROR_LOG_MAXIMUM_SIZE。

警告

EntrySizeUCHAR 值。 如果指定更大的值,编译器将以无提示方式将该值截断为 UCHAR

返回值

IoAllocateErrorLogEntry 返回指向错误日志条目的指针,或者 NULL(如果无法分配日志项)。

言论

驱动程序必须先填写数据包中有关错误的信息,然后调用 IoWriteErrorLogEntry 将条目发布到错误日志。 记录日志条目后,会自动释放错误日志条目缓冲区。 可以使用 IoFreeErrorLogEntry释放不会写入日志的入口缓冲区。

错误日志条目由可变长度 IO_ERROR_LOG_PACKET 结构组成,后跟一个或多个零计数的 Unicode 字符串。 事件查看器将这些字符串插入到它为条目显示的错误消息中。 IO_ERROR_LOG_PACKET 包含一个可变长度成员,即 DumpData 成员。 因此,EntrySize 的值必须 sizeofIO_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