共用方式為


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