共用方式為


IoSetMasterIrpStatus 函式 (ntddk.h)

IoSetMasterIrpStatus 例程會有條件地以指定的 NTSTATUS 值取代 IRP 中的 Status 值。

語法

void IoSetMasterIrpStatus(
  [in, out] PIRP     MasterIrp,
  [in]      NTSTATUS Status
);

參數

[in, out] MasterIrp

主要 IRP的指標。 如需詳細資訊,請參閱。

[in] Status

要與主要 IRP 中 I/O 狀態區塊 成員 狀態 成員進行比較的 NTSTATUS 值。

傳回值

沒有

言論

收到 IRP 時,驅動程式可以建立兩個以上的次級 IRP,以執行原始 IRP(或主要)IRP 所要求的工作。 當次級 IRP 完成時,驅動程式會從次級 IRP 收集完成狀態代碼,並合併它們以形成主要 IRP 的單一完成狀態代碼。

IoSetMasterIrpStatus 實作統一原則,將多個次級 IRP 的狀態代碼合併為主要 IRP 的狀態代碼。 例如,如果主要 IRP 分割成兩個次級 IRP,而其中一個從屬 IRP 成功,另一個則失敗 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 會以下列案例中的 Status 值取代 PIRP->IoStatus.Status 的狀態代碼:

  • **PIRP* 中的狀態值是STATUS_SUCCESS,而狀態 是錯誤碼。
  • **PIRP* 中的狀態值是錯誤碼,但 Status 是較嚴重的錯誤碼。
一般規則有兩個例外狀況。 Status 值STATUS_VERIFY_REQUIRED 一律 取代 **PIRP* 中的狀態值。 Status 值STATUS_FT_READ_FROM_COPY 永远不会 取代 **PIRP* 中的狀態值。

要求

要求 價值
最低支援的用戶端 從 Windows 8 開始提供。
目標平臺 普遍
標頭 ntddk.h (include Ntddk.h, Ntifs.h)
連結庫 NtosKrnl.lib
DLL NtosKrnl.exe
IRQL 任何層級。

另請參閱

IRP