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 はより深刻なエラー コードです。
一般的な規則には 2 つの例外があります。 Status 値 STATUS_VERIFY_REQUIRED は、常に **PIRP* の状態値を置き換えます。 Status 値が STATUS_FT_READ_FROM_COPY の場合、**PIRP* の状態値は置き換えされません

要件

要件
サポートされている最小のクライアント Windows 8以降で使用できます。
対象プラットフォーム ユニバーサル
Header ntddk.h (Ntddk.h、Ntifs.h を含む)
Library NtosKrnl.lib
[DLL] NtosKrnl.exe
IRQL 任意のレベル。

こちらもご覧ください

IRP