Compartilhar via


Obtendo recursos de injeção de erro

Observação

A interface de injeção de erro WHEA requer um computador com a tabela ACPI EINJ ou um Plug-In PSHED que implementa a área funcional de injeção de erro. A maioria dos sistemas de consumidores não inclui uma implementação de EINJ e o Windows não tem uma Plug-In PSHED interna para habilitar a injeção de erro. Sem nenhuma delas presente, as interfaces de injeção de erro retornam um erro.

Um aplicativo de modo de usuário pode obter informações sobre os recursos de injeção de erro da plataforma de hardware chamando o método WHEAErrorInjectionMethods::GetErrorInjectionCapabilitiesRtn . Esse método retorna uma estrutura WHEA_ERROR_INJECTION_CAPABILITIES que descreve os recursos de injeção de erro compatíveis com a plataforma de hardware.

O exemplo de código a seguir mostra como recuperar as informações de recursos de injeção de erro.

IWbemServices *pIWbemServices;
BSTR ClassName;
BSTR MethodName;
HRESULT Result;
IWbemClassObject *pOutParameters;
VARIANT Parameter;
ULONG Status;
WHEA_ERROR_INJECTION_CAPABILITIES ErrorInjectionCapabilities;

// 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.

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

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

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

// Get the capabilities from the output parameters object
Result =
  pOutParameters->Get(
    L"Capabilities",
    0,
    &Parameter,
    NULL,
    NULL
    );
ErrorInjectionCapabilities.AsULONG = Parameter.ulVal;
VariantClear(&Parameter);

// Process the error injection capabilities data
...

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