次の方法で共有


IO_STATUS_BLOCK構造体 (wdm.h)

ドライバーは、IRP の IoCompleteRequest を呼び出す前に、I/O 要求の最終的な状態を示す IRP の I/O 状態ブロック 設定します。

構文

typedef struct _IO_STATUS_BLOCK {
  union {
    NTSTATUS Status;
    PVOID    Pointer;
  };
  ULONG_PTR Information;
} IO_STATUS_BLOCK, *PIO_STATUS_BLOCK;

メンバーズ

Status

これは、要求された操作が正常に完了した場合STATUS_SUCCESS、または XXX値の情報、警告、またはエラー STATUS_完了状態です。 詳細については、「NTSTATUS 値の使用」を参照してください。

Pointer

引っ込み思案。 内部使用のみ。

Information

これは要求依存値に設定されます。 たとえば、転送要求が正常に完了すると、転送されたバイト数に設定されます。 別のSTATUS_XXXで転送要求が完了した場合、このメンバーは 0 に設定されます。

備考

ドライバーのディスパッチ ルーチンがエラー状態の値を持つ IRP を完了しない限り、チェーンの最下位レベルのドライバーは頻繁に I/O 操作の元の要求元に返される値に IRP の 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 構造体の状態コードではなく、この状態コードに依存する必要があります。

詳細については、「I/O ステータス ブロックの」を参照してください。

必要条件

要件 価値
ヘッダー wdm.h (Wdm.h、Ntddk.h、Ntifs.h、Wudfwdm.h を含む)

関連項目

IO_STACK_LOCATION

IRP

IoCompleteRequest

IoSetCompletionRoutine