Partilhar via


Configurando informações de origem do erro

Um aplicativo de modo de usuário pode definir as informações de uma fonte de erro específica compatível com a plataforma de hardware chamando o método WHEAErrorSourceMethods::SetErrorSourceInfoRtn . Nessa situação, o aplicativo fornece uma estrutura WHEA_ERROR_SOURCE_DESCRIPTOR que descreve as informações a serem definidas para a fonte de erro especificada.

O exemplo de código a seguir mostra como definir as informações de origem do erro para uma fonte de erro específica.

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();

Um aplicativo normalmente define as informações de uma fonte de erro quando modifica a configuração da origem do erro. Um aplicativo pode modificar a configuração de uma fonte de erro executando as seguintes etapas:

  1. Recupere a estrutura WHEA_ERROR_SOURCE_DESCRIPTOR que descreve a fonte de erro específica.

    Para obter mais informações sobre como obter informações sobre todas as fontes de erro no sistema, consulte Obtendo informações de origem do erro para todas as fontes de erro.

    Para obter mais informações sobre como obter informações sobre uma fonte de erro específica no sistema, consulte Obtendo informações de origem de erro para uma fonte de erro específica.

  2. Modifique o conteúdo da estrutura WHEA_ERROR_SOURCE_DESCRIPTOR para alterar a configuração da origem do erro.

  3. Defina as informações de origem do erro para a fonte de erro chamando o método WHEAErrorSourceMethods::SetErrorSourceInfoRtn

As alterações feitas na configuração de uma fonte de erro não entrarão em vigor até que o sistema seja reiniciado.