如何通过WMI COM获取BcdObject? [英] how can I get the BcdObject by WMI COM?
问题描述
全部
感谢您的关注!!
我尝试通过Bcd API获取/设置启动配置,我使用WMI COM和c ++来完成它,我的工具是VC8,但我遇到了一个问题:
当我调用IWbemClassObject :: GetMethod时,返回的结果是WBEM_E_ILLEGAL_OPERATION,
when I call IWbemClassObject::GetMethod, it return result is WBEM_E_ILLEGAL_OPERATION ,
我想知道如何获得有效的BcdObject实例?
I want to know how can I get a valid BcdObject instance?
我的代码如下:
// init WMI COM
// init WMI COM
// init IWbemLocator,获取实例,pLoc
// init IWbemLocator, got the instance , pLoc
//连接到命名空间" root \\wmi"并得到了IWbemServices pSvc的实例;
// connect to namespace "root\\wmi" and got the instance of IWbemServices pSvc;
BSTR bstrClsName = SysAllocString(L" BcdStore");
IWbemClassObject * pWbmBcd = NULL;
hr = pSvc-> ; GetObject(bstrClsName,0,NULL,& pWbmBcd,NULL);
if(hr == WBEM_S_NO_ERROR)
{
VARIANT variant1;
IWbemClassObject * pInParamaterClass = NULL;
IWbemClassObject * pOutParamaterClass = NULL;
IWbemClassObject * pInParam = NULL;
IWbemClassObject * pOutParam = NULL;
IWbemCallResult * pCallResult = NULL;
BSTR bstrClsName = SysAllocString (L"BcdStore");
IWbemClassObject *pWbmBcd = NULL;
hr = pSvc->GetObject(bstrClsName, 0, NULL, &pWbmBcd, NULL);
if (hr == WBEM_S_NO_ERROR)
{
VARIANT variant1;
IWbemClassObject *pInParamaterClass = NULL;
IWbemClassObject *pOutParamaterClass = NULL;
IWbemClassObject *pInParam = NULL;
IWbemClassObject *pOutParam = NULL;
IWbemCallResult *pCallResult = NULL;
BSTR bstrMthdName = SysAllocString(L" OpenStore");
BSTR bstrMthdName = SysAllocString (L"OpenStore");
hr = pWbmBcd-> GetMethod(bstrMthdName,0,& pInParamaterClass,NULL);
if( hr == WBEM_S_NO_ERROR)
{
if(NULL!= pInParamaterClass)
{
hr = pInParamaterClass-> SpawnInstance(0,& pInParam);
//创建实例副本< BR>如果(WBEM_S_NO _ERROR == hr)
{
//设置每个属性
VariantInit(& variant1);
V_VT(& variant1)= VT_BSTR;
V_BSTR(& variant1)= SysAllocString (L"");
hr = pInParam-> Put(L" File",0,& variant1,0);
VariantClear(& variant1);
}
}
}
hr = pWbmBcd->GetMethod(bstrMthdName, 0, &pInParamaterClass, NULL);
if (hr == WBEM_S_NO_ERROR)
{
if( NULL != pInParamaterClass)
{
hr=pInParamaterClass->SpawnInstance(0, &pInParam);
// create instance copy
if(WBEM_S_NO_ERROR == hr)
{
// set each property
VariantInit(&variant1);
V_VT(&variant1) = VT_BSTR;
V_BSTR(&variant1) = SysAllocString(L"");
hr = pInParam->Put(L"File", 0, &variant1, 0);
VariantClear(&variant1);
}
}
}
if(WBEM_S_NO_ERROR == hr&& pInParam!= NULL)
BSTR bstrObjectName = SysAllocString(L" \\\\\\\\\\\\\\\\\\\\\\\\\ ;
hr = pSvc-> ExecMethod(bstrObjectName,bstrMthdName,0
,NULL,pInParam,& pOutParam,& pCallResult);
if (WBEM_S_NO_ERROR == hr && pInParam != NULL)
{
BSTR bstrObjectName = SysAllocString (L"\\\\mypc\\ROOT\\WMI:BcdStore");
hr = pSvc->ExecMethod(bstrObjectName, bstrMthdName, 0
, NULL, pInParam, &pOutParam, &pCallResult);
long lResult = 0;
if(pCallResult!= NULL)
{
pCallResult-> GetCallStatus(WBEM_INFINITE,& lResult);
hr = pCallResult-> GetResultObject(0,& ; pOutParamaterClass);
pCallResult-> Release();
pCallResult = NULL;
}
long lResult = 0;
if (pCallResult != NULL)
{
pCallResult->GetCallStatus(WBEM_INFINITE, &lResult);
hr = pCallResult->GetResultObject(0, &pOutParamaterClass);
pCallResult->Release();
pCallResult = NULL;
}
pInParam-> Release();
pInParam = NULL;
pInParamaterClass - > Release();
pInParamaterClass = NULL;
pInParam->Release();
pInParam = NULL;
pInParamaterClass ->Release();
pInParamaterClass = NULL;
SysFreeString(bstrMthdName);
SysFreeString(bstrMthdName);
if(pOutParamaterClass!= NULL&& hr == WBEM_S_NO_ERROR)
{
VariantI nit(& variant1);
hr = pOutParamaterClass-> Get(L" Store",0,& variant1,0,0);
if(variant1.punkVal!= NULL)< br> {
IWbemClassObject * pGotBcdStore = NULL;
if (pOutParamaterClass != NULL && hr == WBEM_S_NO_ERROR)
{
VariantInit(&variant1);
hr = pOutParamaterClass->Get(L"Store", 0, &variant1, 0, 0);
if (variant1.punkVal != NULL)
{
IWbemClassObject *pGotBcdStore = NULL;
hr = variant1.punkVal - > QueryInterface(IID_IWbemClassObject,(void **)& pGotBcdStore);
hr = variant1.punkVal->QueryInterface(IID_IWbemClassObject, (void **)&pGotBcdStore);
if(SUCCEEDED(hr))
if (SUCCEEDED(hr))
{
hr = pGotBcdStore-> GetMethod(L" OpenObject",0& pInParamaterClass,NULL);
< font color ="#ff0000"> //返回结果是WBEM_E_ILLEGAL_OPERATION,
会发生什么?
我的代码中是否有错误?
Are there some error in my code upon?
非常感谢!
推荐答案
谁可以帮助我?
这篇关于如何通过WMI COM获取BcdObject?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!