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 |