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

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

[in] BufferLength

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

[in] ErrorRecord

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

返回值

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

返回代码 描述
STATUS_SUCCESS 从硬件错误中恢复的尝试成功。
STATUS_UNSUCCESSFUL 尝试从硬件错误中恢复失败。

言论

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

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

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

  • 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