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 是較嚴重的錯誤碼。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | 從 Windows 8 開始提供。 |
目標平台 | Universal |
標頭 | ntddk.h (包含 Ntddk.h、Ntifs.h) |
程式庫 | NtosKrnl.lib |
Dll | NtosKrnl.exe |
IRQL | 任何層級。 |