次の方法で共有


IoSetMasterIrpStatus 関数 (ntddk.h)

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

必要条件

要件 価値
サポートされる最小クライアント Windows 8 以降で使用できます。
ターゲット プラットフォーム 万国
ヘッダー ntddk.h (Ntddk.h、Ntifs.h を含む)
ライブラリ NtosKrnl.lib
DLL NtosKrnl.exe
IRQL 任意のレベル。

関連項目

IRP