Compartir a través de


Obtención de funcionalidades de inyección de errores

Nota

La interfaz de inyección de errores WHEA requiere un equipo con la tabla ACPI de EINJ o un Plug-In PSHED que implementa el área funcional de inyección de errores. La mayoría de los sistemas de consumidor no incluyen una implementación de EINJ y Windows no tiene un Plug-In PSHED integrado para habilitar la inserción de errores. Con ninguno de estos presentes, las interfaces de inyección de errores devuelven un error.

Una aplicación en modo de usuario puede obtener información sobre las funcionalidades de inserción de errores de la plataforma de hardware llamando al método WHEAErrorInjectionMethods::GetErrorInjectionCapabilitiesRtn . Este método devuelve una estructura de WHEA_ERROR_INJECTION_CAPABILITIES que describe las funcionalidades de inserción de errores compatibles con la plataforma de hardware.

En el ejemplo de código siguiente se muestra cómo recuperar la información de funcionalidades de inyección de errores.

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