设置错误源信息
用户模式应用程序可以通过调用 WHEAErrorSourceMethods::SetErrorSourceInfoRtn 方法为硬件平台支持的特定错误源设置信息。 在这种情况下,应用程序提供 WHEA_ERROR_SOURCE_DESCRIPTOR 结构,用于描述要为指定的错误源设置的信息。
下面的代码示例演示如何设置特定错误源的错误源信息。
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();
应用程序通常在修改错误源的配置时设置错误源的信息。 应用程序可以通过执行以下步骤来修改错误源的配置:
检索描述特定错误源的WHEA_ERROR_SOURCE_DESCRIPTOR结构。
有关获取有关系统中所有 错误源 的信息的详细信息,请参阅 获取所有错误源的错误源信息。
有关获取系统中特定错误源的信息的详细信息,请参阅 获取特定错误源的错误源信息。
修改WHEA_ERROR_SOURCE_DESCRIPTOR结构的内容以更改错误源的配置。
通过调用 WHEAErrorSourceMethods::SetErrorSourceInfoRtn 方法设置错误源的错误源信息
对错误源的配置所做的任何更改在重启系统后才会生效。