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 成员的大小(以字节为单位)。 指定的值必须是 sizeof(ULONG) 的倍数。
NumberOfStrings
指示驱动程序将提供此错误日志条目的插入字符串数。 对于不需要插入字符串的错误,驱动程序将此值设置为零。 事件查看器使用这些字符串填充此错误代码的字符串模板中的“%2”到“%n”条目。
以 null 结尾的 Unicode 字符串本身遵循内存中的 IO_ERROR_LOG_PACKET 结构。
StringOffset
指示从结构开头开始的任何驱动程序提供的插入字符串数据的偏移量(以字节为单位)。 通常,这将 sizeof(IO_ERROR_LOG_PACKET) 加上 DumpDataSize 成员的值。 如果没有驱动程序提供的插入字符串,StringOffset 可以为零。
EventCategory
指定错误的事件类别。 驱动程序在其消息目录中指定它支持的事件类别和相应的描述性字符串。 事件查看器将描述性字符串显示为错误的 类别 值。
ErrorCode
指定错误的类型。 事件查看器使用错误代码来确定要显示为错误说明值的字符串。 事件查看器采用驱动程序消息目录中提供的错误的字符串模板,将模板中的“%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) |