IoSetMasterIrpStatus 関数 (ntddk.h)
IoSetMasterIrpStatus ルーチンは、IRP の Status 値を指定した NTSTATUS 値に条件付きで置き換えます。
構文
void IoSetMasterIrpStatus(
[in, out] PIRP MasterIrp,
[in] NTSTATUS Status
);
パラメーター
[in, out] MasterIrp
マスター IRP へのポインター。 詳細については、「解説」を参照してください。
[in] Status
マスター IRP の I/O 状態ブロックの Status メンバーと比較する NTSTATUS 値。
戻り値
なし
解説
IRP を受信すると、ドライバーは、元の (またはマスター) IRP によって要求された作業を実行する 2 つ以上の下位 IRP を作成できます。 下位 IRP が完了すると、ドライバーは下位 IRP から完了状態コードを収集し、それらをマージして、マスター IRP の 1 つの完了状態コードを形成します。
IoSetMasterIrpStatus は、複数の下位 IRP の状態コードをマスター IRP の状態コードにマージするための統一されたポリシーを実装します。 たとえば、マスター IRP が 2 つの下位 IRP に分割され、これらの下位 IRP の 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 値はSTATUS_SUCCESS、 Status はエラー コードです。
- **PIRP* の状態値はエラー コードですが、 Status はより深刻なエラー コードです。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows 8以降で使用できます。 |
対象プラットフォーム | ユニバーサル |
Header | ntddk.h (Ntddk.h、Ntifs.h を含む) |
Library | NtosKrnl.lib |
[DLL] | NtosKrnl.exe |
IRQL | 任意のレベル。 |