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 值不需要字符串参数,请将 String 设置为 NULL

[in, optional] Thread

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

返回值

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

注解

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

IoRaiseInformationalHardError 的行为如下所示:

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

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

要求

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

另请参阅

IoSetHardErrorOrVerifyDevice

IoSetThreadHardErrorMode

PsGetCurrentThread