IoSetMasterIrpStatus ルーチンは、IRP の 状態 値を指定した NTSTATUS 値に条件付きで置き換えます。
構文
VOID IoSetMasterIrpStatus(
[in, out] PIRP MasterIrp,
[in] NTSTATUS Status
);
パラメーター
[in, out] MasterIrp
マスター IRPへのポインター。 詳細については、「解説」を参照してください。
[in] Status
マスター IRP で I/O 状態ブロックの 状態 メンバーと比較する NTSTATUS 値。
戻り値
何一つ
備考
IRP を受信すると、ドライバーは、元の (またはマスター) IRP によって要求された作業を実行する 2 つ以上の下位 IRP を作成できます。 下位 IRP が完了すると、ドライバーは下位 IRP から完了状態コードを収集し、マスター IRP の 1 つの完了状態コードを形成するためにそれらをマージします。
IoSetMasterIrpStatus は、複数の下位 IRP の状態コードをマスター IRP の状態コードにマージするための統一されたポリシーを実装します。 たとえば、マスター IRP が 2 つの下位 IRP に分割され、これらの下位 IRP の 1 つが成功し、もう 1 つが失敗した場合、失敗した IRP の状態コードがマスター IRP の状態コードとして使用されます。 ただし、両方の下位 IRP が失敗した場合、より重大なエラー コードがマスター IRP の状態として使用されます。
IoSetMasterIrpStatusへの最初の呼び出しの前に、ドライバーは、マスター IRP の IoStatus.Status メンバーをSTATUS_SUCCESSに設定します (または、必要な場合はSTATUS_FT_READ_FROM_COPYします)。 次に、各下位 IRP が完了すると、ドライバーは IoSetMasterIrpStatus 呼び出して、この IRP の状態コードをマスター IRP の状態コードとマージします。 この呼び出しでは、PIRP パラメーターはマスター IRP を指し、Status パラメーターは下位 IRP の IoStatus.Status メンバーの値に設定されます。
一般に、IoSetMasterIrpStatus 、次の場合、PIRP->IoStatus.Status の状態コードが Status 値に置き換えられます。
- **PIRP* の状態値がSTATUS_SUCCESSされ、状態 はエラー コードです。
- **PIRP* の状態値はエラー コードですが、Status はより重大なエラー コードです。
必要条件
要件 | 価値 |
---|---|
サポートされる最小クライアント | Windows 8 以降で使用できます。 |
ターゲット プラットフォーム の | 万国 |
ヘッダー | ntddk.h (Ntddk.h、Ntifs.h を含む) |
ライブラリ | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | 任意のレベル。 |