获取c++中WMI查询的行数

Get the row count of WMI Query in C++

本文关键字:查询 WMI c++ 获取      更新时间:2023-10-16

下面的vbscript给出了WMI查询返回的行数。

strComputer = "." 
Set objWMIService = GetObject("winmgmts:\" & strComputer & "rootCIMV2") 
Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_PnPSignedDriver",,0)
Wscript.Echo colItems.count

同样的事情我需要在c++中实现。

c++中,使用IWbemServices->ExecQuery方法传递查询

....
//initializing and connecting WMI
....
hr = services->ExecQuery(bstr_t("WQL"), bstr_t(strClass), WBEM_FLAG_FORWARD_ONLY |   WBEM_FLAG_RETURN_IMMEDIATELY, NULL, &results);

我尝试了上面的,但不知道如何得到查询的行数。有人可以建议如何在c++中完成它

在WMI COM API中不存在该属性,要获得记录的数量,您必须使用IEnumWbemClassObject接口并计算您自己返回的实例。

您需要迭代结果:

IWbemClassObject* pclsObj = NULL;
int uRows = 0;
while (pEnumerator)
{
  HRESULT hr = pEnumerator->Next(WBEM_INFINITE, 1, &pclsObj, &uReturn);
  if (0 == uReturn)
  {
     break;
  }
  uRows++;
}

uRows 是你"行count"。