IO_STATUS_BLOCK結構 (wdm.h)
驅動程式會設定 IRP 的 I/O 狀態區塊,以指出 I/O 要求的最終狀態,然後再呼叫 IRP 的 IoCompleteRequest。
語法
typedef struct _IO_STATUS_BLOCK {
union {
NTSTATUS Status;
PVOID Pointer;
};
ULONG_PTR Information;
} IO_STATUS_BLOCK, *PIO_STATUS_BLOCK;
成員
Status
這是完成狀態,STATUS_SUCCESS要求作業成功完成,或資訊、警告或錯誤STATUS_XXX 值。 如需詳細資訊,請參閱 使用NTSTATUS值。
Pointer
保留。 僅供內部使用。
Information
這會設定為要求相依值。 例如,在傳輸要求成功完成時,這會設定為傳輸的位元元組數目。 如果使用另一個STATUS_XXX完成傳輸要求,則此成員會設定為零。
言論
除非驅動程式的分派例程完成具有錯誤狀態值的 IRP,否則鏈結中的最低層級驅動程式通常會將 IRP 的 I/O 狀態區塊設定為將傳回給 I/O 作業原始要求者的值。
IoCompletion 較高層級驅動程式的例程,通常會檢查較低驅動程式已完成的 IRP 中的 I/O 狀態區塊。 根據設計,IRP 中的 I/O 狀態區塊是唯一從基礎設備驅動器傳回至所有較高層級驅動程式 IoCompletion 例程的資訊。
作系統會實作 支援例程, 將 IO_STATUS_BLOCK 值寫入呼叫端提供的輸出緩衝區。 例如,請參閱 ZwOpenFile 或 NtOpenFile。 這些例程會傳回可能不符合 IO_STATUS_BLOCK 結構中狀態代碼的狀態代碼。 如果其中一個例程傳回STATUS_PENDING,呼叫端應該等候 I/O 作業完成,然後檢查 IO_STATUS_BLOCK 結構中的狀態代碼,以判斷作業的最終狀態。 如果例程傳回STATUS_PENDING以外的狀態代碼,呼叫端應該依賴此狀態代碼,而不是 IO_STATUS_BLOCK 結構中的狀態代碼。
要求
要求 | 價值 |
---|---|
標頭 | wdm.h (包括 Wdm.h、Ntddk.h、Ntifs.h、Wudfwdm.h) |