IoAllocateErrorLogEntry 函数 (wdm.h)
IoAllocateErrorLogEntry 例程分配错误日志条目,并返回指向调用方用来提供有关 I/O 错误的信息的数据包的指针。
语法
PVOID IoAllocateErrorLogEntry(
[in] PVOID IoObject,
[in] UCHAR EntrySize
);
参数
[in] IoObject
指向表示发生 I/O 错误的设备的设备对象的指针,或指向表示找到错误的驱动程序的驱动程序对象。
[in] EntrySize
指定要分配的错误日志项的大小(以字节为单位)。 此值不能超过ERROR_LOG_MAXIMUM_SIZE。
警告
EntrySize 是 UCHAR 值。 如果指定更大的值,编译器将以无提示方式将该值截断为 UCHAR 。
返回值
IoAllocateErrorLogEntry 返回指向错误日志条目的指针,或者 NULL(如果无法分配日志项)。
言论
驱动程序必须先填写数据包中有关错误的信息,然后调用 IoWriteErrorLogEntry 将条目发布到错误日志。 记录日志条目后,会自动释放错误日志条目缓冲区。 可以使用 IoFreeErrorLogEntry释放不会写入日志的入口缓冲区。
错误日志条目由可变长度 IO_ERROR_LOG_PACKET 结构组成,后跟一个或多个零计数的 Unicode 字符串。 事件查看器将这些字符串插入到它为条目显示的错误消息中。 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 |