WMI功WMI储备库里查询类实例信息调步查询调异步查询
步查询前进行执行查询异步查询需启动线程查询查询工作结束调定义接口(类似回调函数)处理查询结果
步查询适合查询机系统应查询工作量时候步查询会造成资源等 应网络查询量查询时候异步查询更选择
1)步查询
步查询需COM类型IWbemServices方法ExecQuery需做编辑WQL查询字符串作参数传递该方 法该方法返回IEnumWbemClassObject类型指针该类型指针保存查询结果集利结果集调 IEnumWbemClassObjectNext函数遍历结果集然选择确切需数
IEnumWbemClassObject* pEnumerator NULL
hres pSvc>ExecQuery(
bstr_t(WQL)
bstr_t(SELECT * FROM Win32_BIOS)
WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY
NULL
&pEnumerator)
if (FAILED(hres))
{
cout << Query for operating system name failed
<< Error code 0x
<< hex << hres << endl
pSvc>Release()
pLoc>Release()
CoUninitialize()
return 1 Program has failed
}
遍历
IWbemClassObject *pclsObj
ULONG uReturn 0
while (pEnumerator)
{
HRESULT hr pEnumerator>Next(WBEM_INFINITE 1
&pclsObj &uReturn)
if(0 uReturn)
{
break
}
VARIANT vtProp
VariantInit(&vtProp)
取BIOS序列号
hr pclsObj>Get(LSerialNumber 0 &vtProp 0 0)
wcout << BIOS SerialNumber << vtPropbstrVal << endl
取BIOS版
hr pclsObj>Get(LVersion 0 &vtProp 0 0)
wcout << BIOS Version << vtPropbstrVal << endl
VariantClear(&vtProp)
}
2)异步查询
异步查询样需COM类型IWbemServices方法ExecQueryAsync该方法会前查询WMI储备库进程中转移线 程查询工作进行WMI会调实现IWbemSinkObject接口类型Indicate方法通知程序查询结束步查询 样查询结果集IEnumWbemClassObject类型指针返回户
代码演示异步查询方法响应查询结果方法定义类QuerySink中篇幅限制请MSDN中查找
Create a new sink object
QuerySink *pSink new QuerySink
Initialize the query and query language
BSTR strQuery SysAllocString(LSELECT * FROM ClassName)
BSTR strQueryLang SysAllocString(LWQL)
Issue the query
HRESULT hRes pSvc>ExecQueryAsync(strQueryLang strQuery 0
NULL pSink)
Clean up
SysFreeString(strQuery)
SysFreeString(strQueryLang)
if (hRes)
{
printf(ExecQueryAsync failed with 0xX hRes)
return
}
printf(Completed )
文档香网(httpswwwxiangdangnet)户传
《香当网》用户分享的内容,不代表《香当网》观点或立场,请自行判断内容的真实性和可靠性!
该内容是文档的文本内容,更好的格式请下载文档