1) 取Provider实例象
调IWbemServicesGetObject方法取想调Provider类型实例IWbemClassObject 类型指针返回
BSTR MethodName SysAllocString(LCreate)
BSTR ClassName SysAllocString(LWin32_Process)
IWbemClassObject* pClass NULL
hres pSvc>GetObject(ClassName 0 NULL &pClass NULL)
2)取Provider提供方法参数
调IWbemClassObjectGetMethod方法取想调方法参数IWbemClassObject类型指针返 回
IWbemClassObject* pInParamsDefinition NULL
hres pClass>GetMethod(MethodName 0
&pInParamsDefinition NULL)
3)生成Provider提供方法参数象
调IWbemClassObjectSpawnInstance方法生成调方法参数实例需第二步参数类型指针调 SpawnInstance方法传递该方法IWbemClassObject指针作生成参数象指针
IWbemClassObject* pClassInstance NULL
hres pInParamsDefinition>SpawnInstance(0 &pClassInstance)
4)设置参数象属性
调IWbemClassObjectPut方法设置参数象类型
VARIANT varCommand
varCommandvt VT_BSTR
varCommandbstrVal Lnotepadexe
hres pClassInstance>Put(LCommandLine 0
&varCommand 0)
wprintf(LThe command is s V_BSTR(&varCommand))
5)调方法
查询信息相调方法分步方式异步方式步方式等执行进程结束继续执行异步方式利实现IWbemObjectSink 接口类型创建新线程继续运行前线程新创建线程完成调方法然回调IWbemObjectSink Indicate函数处理函数返回值
步方式调IWbemServicesExecMethod方法调Provider提供方法前生成关参数实例传该方法
IWbemClassObject* pOutParams NULL
hres pSvc>ExecMethod(ClassName MethodName 0
NULL pClassInstance &pOutParams NULL)
异步方式调样Provider函数步方式异步方式调IWbemServicesExecMethodAsync方法 第三参数IFlag设置WBEM_FLAG_SEND_STATUS接受调时中间状态信息没输出参数(例中pOutParams) 参数实现IWbemObjectSink接口类型
QuerySink *pSink new QuerySink()
hres pSvc>ExecMethodAsync(ClassName MethodName WBEM_FLAG_SEND_STATUS
NULL pClassInstance pSink)
调方法查询信息出种半步方式步方法调者线程等方法执行完异步方法需编程员继承IWbemObjectSink接 口进行线程编程半步方式种折中方法进行IWbemServices实例中方法调创建线程查询然写入 IWbemCallResult接口实例中线程查询
IWbemCallResult *pCallRes 0
IWbemClassObject *pObj 0
hres pSvc>ExecMethod(ClassName MethodName WBEM_FLAG_RETURN_IMMEDIATELY
NULL pClassInstanceNULL &pCallRes)
while (true)
{
LONG lStatus 0
HRESULT hRes pCallRes>GetCallStatus(5000 &lStatus)
if ((hRes WBEM_S_NO_ERROR))
break
if ((hRes WBEM_S_TIMEDOUT))
continue
}
hres pCallRes>GetResultObject(5000 &pObj)
if (hres)
{
pCallRes>Release()
return 1
}
VARIANT varReturnValue
hres pObj>Get(_bstr_t(LReturnValue) 0
&varReturnValue NULL 0)
cout << varReturnValuelVal << endl
pCallRes>Release()
pObj>Release()
通WMI调方法基形式XP调方法功较少VistaWindowsroot\wmi命名空间中提供 Provider方法代驱动做事情
较遗憾MSDN文档MS提供WMI Tool实际体现数致WmiSetBrightnessMethods类SetBrightness方法两参数样情 况uint8uint64dotNet台准备样Put进两参数hres 返回S_OK execMethod时会出现类型匹配错误较挠头~希果朋友路恰巧知道C++COM调方法留言者加 QQ十分感谢
文档香网(httpswwwxiangdangnet)户传
《香当网》用户分享的内容,不代表《香当网》观点或立场,请自行判断内容的真实性和可靠性!
该内容是文档的文本内容,更好的格式请下载文档