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 を含む) |