次の方法で共有


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、または情報、警告、またはエラー STATUS_XXX 値のいずれかです。 詳細については、「 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 状態ブロック」を参照してください。

要件

要件
Header wdm.h (Wdm.h、Ntddk.h、Ntifs.h、Wudfwdm.h を含む)

こちらもご覧ください

IO_STACK_LOCATION

IRP

IoCompleteRequest

IoSetCompletionRoutine