Windows IWbemServices->ExecQuery()在调用之间返回不同的结果
当有多个硬盘时,我使用以下代码获取硬盘的签名。IWbemServices->ExecQuery执行的从Win32_DiskDrive中选择*的结果具有这些磁盘信息的不同顺序。这合理吗?我的意思是,我们在同一台机器上调用相同的Windows API,它可能会返回不同的结果Windows IWbemServices->ExecQuery()在调用之间返回不同的结果,windows,wmi,Windows,Wmi,当有多个硬盘时,我使用以下代码获取硬盘的签名。IWbemServices->ExecQuery执行的从Win32_DiskDrive中选择*的结果具有这些磁盘信息的不同顺序。这合理吗?我的意思是,我们在同一台机器上调用相同的Windows API,它可能会返回不同的结果 IEnumWbemClassObject* pEnumerator = NULL; HRESULT hres = pSvc->ExecQuery( bstr_t("WQL"
IEnumWbemClassObject* pEnumerator = NULL;
HRESULT hres = pSvc->ExecQuery(
bstr_t("WQL"),
bstr_t("SELECT * FROM Win32_DiskDrive"), // should the result keep in order?
WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY,
NULL,
&pEnumerator);
if (FAILED(hres)) {
pEnumerator->Release();
return false;
}
IWbemClassObject *pclsObj;
ULONG uReturn = 0;
string MBSerialNo;
bool bHasSerialNo = false;
if (pEnumerator)
{
/* Get the 1st result.
*/
HRESULT hr = pEnumerator->Next(WBEM_INFINITE, 1, &pclsObj, &uReturn);
if (0 != uReturn)
{
VARIANT vtProp;
vtProp.vt = VT_UINT;
vtProp.uintVal = 0;
VariantInit(&vtProp);
hr = pclsObj->Get(L"Signature", 0, &vtProp, 0, 0);
__int64 iVal = vtProp.uintVal;
if (iVal == 0) { return false; }
char buff[1024];
memset(buff, 0, 1024);
_i64toa_s(iVal, buff, 1024, 10);
cout << "Signature value = " << buff << endl;
VariantClear(&vtProp);
pclsObj->Release();
}
}
pEnumerator->Release();