Compartir a través de


Configuración de la información de origen del error

Una aplicación en modo de usuario puede establecer la información de un origen de error determinado compatible con la plataforma de hardware mediante una llamada al método WHEAErrorSourceMethods::SetErrorSourceInfoRtn . En esta situación, la aplicación proporciona una estructura WHEA_ERROR_SOURCE_DESCRIPTOR que describe la información que se va a establecer para el origen de error especificado.

En el ejemplo de código siguiente se muestra cómo establecer la información de origen del error para un origen de error determinado.

IWbemServices *pIWbemServices;
WHEA_ERROR_SOURCE_DESCRIPTOR ErrorSourceInfo;
BSTR ClassName;
BSTR MethodName;
HRESULT Result;
IWbemClassObject *pClass;
IWbemClassObject *pInParametersClass;
IWbemClassObject *pInParameters;
IWbemClassObject *pOutParameters;
VARIANT Parameter;
SAFEARRAY *Array;
PVOID ArrayData;
ULONG Status;

// The following example assumes that the application
// has previously connected to WMI on the local machine
// and that the pIWbemServices variable contains the
// pointer that was returned from the call to the
// IWbemLocator::ConnectServer method.

// The following also assumes that the ErrorSourceInfo
// contains the error source information to be set.

// Note that the SetErrorSourceInfoRtn method determines
// the identifier of the error source for which the
// information is being set from the ErrorSourceId
// member of the WHEA_ERROR_SOURCE_DESCRIPTOR structure.

// Specify the class and method to execute
ClassName = SysAllocString(L"WHEAErrorSourceMethods");
MethodName = SysAllocString(L"SetErrorSourceInfoRtn");

// Get the class object for the method definition
Result =
  pIWbemServices->GetObject(
    ClassName,
    0,
    NULL,
    &pClass,
    NULL
    );

// Get the input parameter class object for the method
Result =
  pClass->GetMethod(
    MethodName,
    0,
    &pInParametersClass,
    NULL
    );

// Create an instance of the input parameter class
Result =
  pInParametersClass->SpawnInstance(
    0,
    &pInParameters
    );

// Create a safe array for the error source information
Array =
  SafeArrayCreateVector(
    VT_UI1,
    0,
    sizeof(WHEA_ERROR_SOURCE_DESCRIPTOR)
    );

// Get access to the data buffer
Result =
  SafeArrayAccessData(
    Array,
    &ArrayData
    );

// Copy the error source information
*(PWHEA_ERROR_SOURCE_DESCRIPTOR)ArrayData =
  ErrorSourceInfo;

// Release access to the data buffer
SafeArrayUnaccessData(Array);

// Set the ErrorSourceInfo parameter
Parameter.vt = VT_ARRAY | VT_UI1;
Parameter.parray = Array;
Result =
  pInParameters->Put(
    L"ErrorSourceInfo",
    0,
    &Parameter,
    0
    );
VariantClear(&Parameter);

// Set the Length parameter
Parameter.vt = VT_UI4;
Parameter.ulVal = sizeof(WHEA_ERROR_SOURCE_DESCRIPTOR);
Result =
  pInParameters->Put(
    L"Length",
    0,
    &Parameter,
    0
    );
VariantClear(&Parameter);

// Call the SetErrorSourceInfoRtn method indirectly
// by calling the IWbemServices::ExecMethod method.
Result =
  pIWbemServices->ExecMethod(
    ClassName,
    MethodName,
    0,
    NULL,
    &pInParameters,
    &pOutParameters,
    NULL
    );

// Get the status from the output parameters object
Result =
  pOutParameters->Get(
    L"Status",
    0,
    &Parameter,
    NULL,
    NULL
    );
Status = Parameter.ulval;
VariantClear(&Parameter);

// Free up resources
SysFreeString(ClassName);
SysFreeString(MethodName);
pInParameters->Release();
pInParametersClass->Release();
pClass->Release();
pOutParameters->Release();

Normalmente, una aplicación establece la información de un origen de error cuando modifica la configuración del origen de errores. Una aplicación puede modificar la configuración de un origen de error mediante los pasos siguientes:

  1. Recupere la estructura WHEA_ERROR_SOURCE_DESCRIPTOR que describe el origen de error determinado.

    Para obtener más información sobre cómo obtener información sobre todos los orígenes de errores del sistema, vea Getting Error Source Information for All Error Sources.

    Para obtener más información sobre cómo obtener información sobre un origen de error determinado en el sistema, vea Obtener información de origen de errores para un origen de error específico.

  2. Modifique el contenido de la estructura de WHEA_ERROR_SOURCE_DESCRIPTOR para cambiar la configuración del origen del error.

  3. Establezca la información de origen del error para el origen del error mediante una llamada al método WHEAErrorSourceMethods::SetErrorSourceInfoRtn

Los cambios realizados en la configuración de un origen de error no surtirán efecto hasta que se reinicie el sistema.