PSHED 插件的 ReadErrorRecord 回调函数从系统的持久数据存储读取错误记录。
语法
PSHED_PI_READ_ERROR_RECORD PshedPiReadErrorRecord;
NTSTATUS PshedPiReadErrorRecord(
[in, out, optional] PVOID PluginContext,
[in] ULONG Flags,
[in] ULONGLONG ErrorRecordId,
[out] PULONGLONG NextErrorRecordId,
[in, out] PULONG RecordLength,
[out] PWHEA_ERROR_RECORD ErrorRecord
)
{...}
参数
[in, out, optional] PluginContext
指向在 WHEA_PSHED_PLUGIN_REGISTRATION_PACKET上下文 结构成员中指定的上下文区域的指针,当 PSHED 插件调用 PshedRegisterPlugin 函数以向 PSHED 注册自身时。
[in] Flags
影响读取作的标志的按位 OR 组合。 当前未定义任何标志。
[in] ErrorRecordId
要从系统的持久性数据存储中读取的错误记录的标识符。 如果系统持久数据存储中没有与此标识符匹配的错误记录,则 ReadErrorRecord 回调函数必须返回STATUS_OBJECT_NOT_FOUND。
[out] NextErrorRecordId
指向 ULONGLONG 类型的变量的指针,该变量接收存储在系统持久数据存储中的下一个错误记录的标识符。 如果系统持久数据存储中没有其他错误记录,则应在此参数中返回当前正在读取的错误记录的标识符。
[in, out] RecordLength
指向 ULONG 类型的变量的指针,该变量包含由 ErrorRecord 参数指向的缓冲区的大小(以字节为单位)。 如果缓冲区的大小足以包含正在读取的错误记录,则 ReadErrorRecord 回调函数将此变量设置为缓冲区中返回的错误记录的大小(以字节为单位)。 但是,如果缓冲区的大小太小而无法包含正在读取的错误记录,则 ReadErrorRecord 回调函数将此变量设置为包含错误记录所需的大小(以字节为单位)。 在这种情况下,ReadErrorRecord 回调函数必须返回STATUS_BUFFER_TOO_SMALL。
[out] ErrorRecord
指向接收从系统持久数据存储读取的错误记录的缓冲区的指针。
返回值
PSHED 插件的 ReadErrorRecord 回调函数返回以下 NTSTATUS 代码之一:
| 返回代码 | 描述 |
|---|---|
| STATUS_SUCCESS | 错误记录已成功从系统的持久性数据存储中读取。 |
| STATUS_OBJECT_NOT_FOUND | 系统中的持久性数据存储中没有与 ErrorRecordId 参数中指定的标识符匹配的错误记录。 |
| STATUS_BUFFER_TOO_SMALL | 缓冲区的大小太小,无法包含正在读取的错误记录。 |
| STATUS_UNSUCCESSFUL | 发生错误。 |
言论
参与错误记录持久性的 PSHED 插件将 Callbacks.WriteErrorRecord、Callbacks.ReadErrorRecord 和 Callbacks.ClearErrorRecordWHEA_PSHED_PLUGIN_REGISTRATION_PACKET 结构的成员指向其 WriteErrorRecord、ReadErrorRecord、 和 ClearErrorRecord 回调函数时,插件调用 PshedRegisterPlugin 函数以向 PSHED 注册自身。 PSHED 插件还必须在 WHEA_PSHED_PLUGIN_REGISTRATION_PACKET 结构的 FunctionalAreaMask 成员中设置 PshedFAErrorRecordPersistence 标志。
Windows 内核调用 PSHED,以便在系统在出现致命错误或不可恢复错误条件后从系统的持久性数据存储读取错误记录。 如果注册 PSHED 插件以参与错误记录持久性,PSHED 将调用 PSHED 插件的 ReadErrorRecord 回调函数来执行读取作。 用于从系统的持久性数据存储中读取错误记录的机制特定于平台。
要求
| 要求 | 价值 |
|---|---|
| 目标平台 | 桌面 |
| 标头 | ntddk.h (包括 Ntddk.h) |
| IRQL | IRQL = DISPATCH_LEVEL |