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 |