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 来执行原始 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 成员的值。

一般情况下,IoSetMasterIrpStatusPIRP中的状态代码替换为 状态 值>IoStatus.Status

  • PIRP* 中的状态值STATUS_SUCCESS,状态 是错误代码。
  • PIRP* 中的状态值是错误代码,但 状态 是更严重的错误代码。
常规规则有两个例外。 状态 值始终STATUS_VERIFY_REQUIRED 替换 PIRP* 中的状态值。 状态 值STATUS_FT_READ_FROM_COPY 永远不会 替换 PIRP* 中的状态值。

要求

要求 价值
最低支持的客户端 从 Windows 8 开始可用。
目标平台 普遍
标头 ntddk.h (包括 Ntddk.h、 Ntifs.h)
NtosKrnl.lib
DLL NtosKrnl.exe
IRQL 任何级别。

另请参阅

IRP