IoRaiseInformationalHardError 函数 (ntddk.h)

IoRaiseInformationalHardError 例程向用户发送对话框,警告设备 I/O 错误,指示用户 I/O 请求失败的原因。

语法

BOOLEAN IoRaiseInformationalHardError(
  [in]           NTSTATUS        ErrorStatus,
  [in, optional] PUNICODE_STRING String,
  [in, optional] PKTHREAD        Thread
);

参数

[in] ErrorStatus

错误状态代码(IO_ERR_XXX)。

[in, optional] String

指向 Unicode 字符串的指针,该字符串提供有关错误的其他信息。 某些 NT 状态代码需要字符串参数,例如文件或目录名称。 如果指定的 ErrorStatus 值不需要字符串参数,请将 字符串 设置为 NULL

[in, optional] Thread

指向其 IRP 由于 ErrorStatus 参数指定的错误而失败的线程的指针。

返回值

IoRaiseInformationalHardError 如果对话框成功排队,则返回 TRUE。 如果 线程禁用对话框,则此例程将返回 FALSE;池分配失败、已排队的对话框过多或等效对话框已挂起用户响应(例如等待用户按 RETURN)。

言论

IoRaiseInformationalHardError 采用系统定义的 NT 错误值作为参数。 驱动程序编写器可以使用事件日志 API 向用户传达驱动程序定义的事件字符串。

IoRaiseInformationalHardError 的行为如下所示:

  • 如果在 Ntstatus.h 头文件中未定义调用方提供的 ErrorStatus 值,则无论 字符串 参数值如何,对话框始终显示文本“未知硬错误”。
  • 如果在 Ntstatus.h 头文件中定义了调用方提供的 ErrorStatus 值,则对话框会显示 Ntstatus.h 中相应 MessageText 字符串中的文本,而不考虑 String 参数值。
  • 如果 Thread 参数指定在应用程序上下文中运行的线程,对话框中显示的文本为“ApplicationName.exe - 系统错误”。
  • 如果 Thread 参数为 NULL 或指定在任意系统上下文中运行的线程,则对话框中显示的文本为“系统进程 - 系统错误”。 此外,如果在 Ntstatus.h 中定义了 ErrorStatus 值,则相应的 MessageText 字符串将写入事件日志。
如果先前对 IoSetThreadHardErrorMode 例程的调用禁用了指定线程的硬错误,IoRaiseInformationalHardError 返回 FALSE

从 Windows Vista 开始,如果例程从会话 0 中的线程(即来自任何系统线程)调用,则例程成功并返回 TRUE时,不会显示任何对话框。

要求

要求 价值
最低支持的客户端 从 Windows 2000 开始可用。
目标平台 普遍
标头 ntddk.h (包括 Ntddk.h)
NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <=APC_LEVEL
DDI 符合性规则 HwStorPortProhibitedDIs(storport)IrqlIoApcLte(wdm)

另请参阅

IoSetHardErrorOrVerifyDevice

IoSetThreadHardErrorMode

PsGetCurrentThread