共用方式為


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 值寫入呼叫端提供的輸出緩衝區。 例如,請參閱 ZwOpenFileNtOpenFile。 這些例程會傳回可能不符合 IO_STATUS_BLOCK 結構中狀態代碼的狀態代碼。 如果其中一個例程傳回STATUS_PENDING,呼叫端應該等候 I/O 作業完成,然後檢查 IO_STATUS_BLOCK 結構中的狀態代碼,以判斷作業的最終狀態。 如果例程傳回STATUS_PENDING以外的狀態代碼,呼叫端應該依賴此狀態代碼,而不是 IO_STATUS_BLOCK 結構中的狀態代碼。

如需詳細資訊,請參閱 I/O 狀態區塊

規格需求

需求
標頭 wdm.h (包括 Wdm.h、Ntddk.h、Ntifs.h、Wudfwdm.h)

另請參閱

IO_STACK_LOCATION

IRP

IoCompleteRequest

IoSetCompletionRoutine