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 來執行原始 (或主要) 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 會將 PIRP-IoStatus.Status> 中的狀態代碼取代為下列案例中的 Status 值:

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

規格需求

需求
最低支援的用戶端 從 Windows 8 開始提供。
目標平台 Universal
標頭 ntddk.h (包含 Ntddk.h、Ntifs.h)
程式庫 NtosKrnl.lib
Dll NtosKrnl.exe
IRQL 任何層級。

另請參閱

IRP