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
指出結構開頭的位移,以位元組為單位,其中任何驅動程式提供的插入字串數據開始。 一般而言,這會 是sizeof (IO_ERROR_LOG_PACKET) 加上 DumpDataSize 成員的值。 如果沒有驅動程式提供的插入字串, StringOffset 可以是零。
EventCategory
指定錯誤的事件類別目錄。 驅動程式會指定其支援的事件類別,以及其訊息目錄中對應的描述性字串。 事件檢視器 會將描述性字串顯示為錯誤的 Category 值。
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) |