IO_ERROR_LOG_PACKET 结构 (wdm.h)
IO_ERROR_LOG_PACKET 结构用作错误日志条目的标头。
语法
typedef struct _IO_ERROR_LOG_PACKET {
UCHAR MajorFunctionCode;
UCHAR RetryCount;
USHORT DumpDataSize;
USHORT NumberOfStrings;
USHORT StringOffset;
USHORT EventCategory;
NTSTATUS ErrorCode;
ULONG UniqueErrorValue;
NTSTATUS FinalStatus;
ULONG SequenceNumber;
ULONG IoControlCode;
LARGE_INTEGER DeviceOffset;
ULONG DumpData[1];
} IO_ERROR_LOG_PACKET, *PIO_ERROR_LOG_PACKET;
成员
MajorFunctionCode
指示发生错误时驱动程序正在处理的 IRP IRP_MJ_XXX 主要函数代码。 设置此值是可选的。
RetryCount
指示驱动程序重试操作并遇到此错误的次数。 使用零指示驱动程序尝试了一次操作,或者为超出初始尝试的每次重试添加一个。
DumpDataSize
指示此结构的可变长度 DumpData 成员的大小(以字节为单位)。 指定的值必须是大小为 (ULONG) 的 倍数。
NumberOfStrings
指示驱动程序将随此错误日志条目一起提供的插入字符串数。 对于不需要插入字符串的错误,驱动程序将此值设置为零。 事件查看器使用这些字符串来填充此错误代码的字符串模板中的“%2”到“%n”条目。
以 null 结尾的 Unicode 字符串本身遵循内存中的 IO_ERROR_LOG_PACKET 结构。
StringOffset
指示从结构开头开始的偏移量(以字节为单位),驱动程序提供的任何插入字符串数据从该偏移量开始。 通常,此 大小 为 (IO_ERROR_LOG_PACKET) 加上 DumpDataSize 成员的值。 如果没有驱动程序提供的插入字符串, StringOffset 可以为零。
EventCategory
指定错误的事件类别。 驱动程序指定它支持的事件类别及其消息目录中的相应描述性字符串。 事件查看器将描述性字符串显示为错误的 Category 值。
ErrorCode
指定错误的类型。 事件查看器使用错误代码来确定要显示为错误的 Description 值的字符串。 事件查看器采用驱动程序的消息目录中提供的错误的字符串模板,将模板中的“%1”替换为驱动程序的设备对象的名称,并将“%2”到“%n”替换为随错误日志条目提供的插入字符串。
ErrorCode 是系统定义的或驱动程序定义的常量;有关详细信息 ,请参阅日志记录错误 。
UniqueErrorValue
一个特定于驱动程序的值,该值指示在驱动程序中检测到错误的位置。 设置此值是可选的。
FinalStatus
指定要为触发错误的操作返回的 NTSTATUS 值。 设置此值是可选的。
SequenceNumber
为当前 IRP 指定驱动程序分配的序列号,该序列号在给定请求的生存期中应为常量。 设置此值是可选的。
IoControlCode
对于 IRP_MJ_DEVICE_CONTROL 或 IRP_MJ_INTERNAL_DEVICE_CONTROL IRP,此成员为尝试错误的请求指定 I/O 控制代码。 否则,此值为零。 设置此值是可选的。
DeviceOffset
指定发生错误的设备的驱动程序指定的偏移量。 设置此值是可选的。
DumpData[1]
一个可变大小的数组,可用于存储特定于驱动程序的二进制数据,例如寄存器值或可用于识别错误原因的任何其他信息。 驱动程序必须在此结构的 DumpDataSize 成员中指定数组的大小(以字节为单位)。
注解
驱动程序使用 IoAllocateErrorLogEntry 例程分配错误日志条目。 IO_ERROR_LOG_PACKET 结构用作返回的缓冲区的标头。 它在内存中后跟日志条目的任何插入字符串。
请注意,I/O 管理器本身会将一些信息插入到系统错误日志中,例如设备和驱动程序的名称。 I/O 管理器保留 80 个字节来保存此信息。 如果此信息的大小超过 80 字节,则 I/O 管理器会根据需要截断驱动程序的插入字符串。
有关如何使用此结构的详细信息,请参阅 日志记录错误。
要求
要求 | 值 |
---|---|
标头 | wdm.h(包括 Wdm.h、Ntddk.h、Ntifs.h) |