PSHED_PI_ATTEMPT_ERROR_RECOVERY回调函数 (ntddk.h)

PSHED 插件的 AttemptRecovery 回调函数尝试从可恢复的硬件错误中恢复。

语法

PSHED_PI_ATTEMPT_ERROR_RECOVERY PshedPiAttemptErrorRecovery;

NTSTATUS PshedPiAttemptErrorRecovery(
  [in, out, optional] PVOID PluginContext,
  [in]                ULONG BufferLength,
  [in]                PWHEA_ERROR_RECORD ErrorRecord
)
{...}

参数

[in, out, optional] PluginContext

指向当 PSHED 插件调用 PshedRegisterPlugin 函数以向 PSHED 注册自身时,在 WHEA_PSHED_PLUGIN_REGISTRATION_PACKET 结构的 Context 成员中指定的上下文区域的指针。

[in] BufferLength

ErrorRecord 参数指向的错误记录的大小(以字节为单位)。

[in] ErrorRecord

指向 WHEA_ERROR_RECORD 结构的指针,该结构描述可恢复硬件错误的错误记录。

返回值

PSHED 插件的 AttemptRecovery 回调函数返回以下 NTSTATUS 代码之一。

返回代码 说明
STATUS_SUCCESS 尝试从硬件错误中恢复已成功。
STATUS_UNSUCCESSFUL 尝试从硬件错误中恢复失败。

注解

参与错误恢复的 PSHED 插件将WHEA_PSHED_PLUGIN_REGISTRATION_PACKET结构的 Callbacks.AttemptRecovery 成员设置为在插件调用 PshedRegisterPlugin 函数以向 PSHED 注册自身时指向其 AttemptRecovery 回调函数。 PSHED 插件还必须在 WHEA_PSHED_PLUGIN_REGISTRATION_PACKET 结构的 FunctionalAreaMask 成员中设置 PshedFAErrorRecovery 标志。

将所有硬件错误数据放入错误记录后,Windows 内核在处理错误时尝试从可恢复的硬件错误中恢复。 然后,Windows 内核会调用 PSHED,使其有机会执行任何所需的恢复操作。 如果注册 PSHED 插件以参与错误恢复,则 PSHED 会调用 PSHED 插件的 AttemptRecovery 回调函数,以便它可以尝试更正错误和/或执行从错误条件中完全恢复所需的任何其他操作。

如果 Windows 内核或 PSHED 成功从硬件错误中恢复,则会在调用 PSHED 插件的 AttemptRecovery 回调函数之前更新描述错误的WHEA_ERROR_RECORD结构,如下所示:

  • Header.Severity 成员已从 WheaErrSevRecoverable 更改为 WheaErrSevCorrected

  • 设置 Header.Flags.Recovered 位。

如果 PSHED 插件成功从硬件错误中恢复,则 PSHED 将在调用 PSHED 插件的 AttemptRecovery 回调函数返回后代表 PSHED 插件更新WHEA_ERROR_RECORD结构。 PSHED 插件的 AttemptRecovery 回调函数不应修改错误记录。

PSHED 在 IRQL <= HIGH_LEVEL调用 PSHED 插件的 AttemptRecovery 回调函数。 调用此回调函数的确切 IRQL 取决于发生的特定硬件错误类型。

要求

要求
目标平台 桌面
标头 ntddk.h (包括 Ntddk.h)
IRQL IRQL >= DISPATCH_LEVEL

另请参阅

PshedRegisterPlugin

WHEA_ERROR_RECORD

WHEA_PSHED_PLUGIN_REGISTRATION_PACKET