Participar en la recuperación de información de error
Para participar en la recuperación de información de error, un complemento PSHED debe implementar las siguientes funciones de devolución de llamada:
En el ejemplo de código siguiente se muestra cómo implementar estas funciones de devolución de llamada.
//
// The PSHED plug-in's RetrieveErrorInfo callback function
//
NTSTATUS
RetrieveErrorInfo(
IN OUT PVOID PluginContext,
IN PWHEA_ERROR_SOURCE_DESCRIPTOR ErrorSource,
IN ULONGLONG BufferLength,
IN OUT PWHEA_ERROR_PACKET Packet
)
{
// Check if the plug-in supports retrieving error
// information from the specified error source.
if (...)
{
// Check if there is enough space remaining in the hardware
// error packet to update it with the platform-specific
// error information.
if (...)
{
// Retrieve the platform-specific error information from
// the error source and update the hardware error packet.
...
// If successful, return success status
if (...)
{
return STATUS_SUCCESS;
}
// Failed to retrieve the platform-specific error information
else
{
return STATUS_UNSUCCESSFUL;
}
}
// Insufficient space in the hardware error packet.
else
{
return STATUS_BUFFER_TOO_SMALL;
}
}
// Not supported by the plug-in
else
{
return STATUS_NOT_SUPPORTED;
}
}
//
// The PSHED plug-in's FinalizeErrorRecord callback function
//
NTSTATUS
FinalizeErrorRecord(
IN OUT PVOID PluginContext,
IN PWHEA_ERROR_SOURCE_DESCRIPTOR ErrorSource,
IN ULONG BufferLength,
IN OUT PWHEA_ERROR_RECORD ErrorRecord
)
{
// Check if the plug-in supports finalizing the error
// record for errors from the specified error source.
if (...)
{
// Check if there is enough space remaining in the
// error record to update it with the supplementary
// platform-specific error record sections.
if (...)
{
// Update the error record with the supplementary
// platform-specific error record sections.
...
// If successful, return success status
if (...)
{
return STATUS_SUCCESS;
}
// Failed to update the error record
else
{
return STATUS_UNSUCCESSFUL;
}
}
// Insufficient space in the error record.
else
{
return STATUS_BUFFER_TOO_SMALL;
}
}
// Not supported by the plug-in
else
{
return STATUS_NOT_SUPPORTED;
}
}
//
// The PSHED plug-in's ClearErrorStatus callback function
//
NTSTATUS
ClearErrorStatus(
IN OUT PVOID PluginContext,
IN PWHEA_ERROR_SOURCE_DESCRIPTOR ErrorSource,
IN ULONG BufferLength,
IN PWHEA_ERROR_RECORD ErrorRecord
)
{
// Check if the plug-in supports clearing the error
// status for errors from the specified error source.
if (...)
{
// Clear the error status for the error source
...
// If successful, return success status
if (...)
{
return STATUS_SUCCESS;
}
// Failed to clear the error status
else
{
return STATUS_UNSUCCESSFUL;
}
}
// Not supported by the plug-in
else
{
return STATUS_NOT_SUPPORTED;
}
}
Un complemento PSHED que participa en la recuperación de información de error debe especificar la marca PshedFAErrorInfoRetrieval cuando se registra en el sistema operativo.