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,因此例程本身无法可靠地检测传递的值是否太大。

驱动程序不得将返回 NULLIoAllocateErrorLogEntry 视为致命错误。 无论驱动程序是否可以记录错误,驱动程序都必须正常运行。

要求

   
最低受支持的客户端 在 Windows 2000 和更高版本的 Windows 中可用。
目标平台 通用
标头 wdm.h(包括 Wdm.h、Ntddk.h、Ntifs.h)
Library NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL

另请参阅

IO_ERROR_LOG_PACKET

IoFreeErrorLogEntry

IoWriteErrorLogEntry