Windows IWbemServices->ExecQuery()在调用之间返回不同的结果

Windows IWbemServices->ExecQuery()在调用之间返回不同的结果,windows,wmi,Windows,Wmi,当有多个硬盘时,我使用以下代码获取硬盘的签名。IWbemServices->ExecQuery执行的从Win32_DiskDrive中选择*的结果具有这些磁盘信息的不同顺序。这合理吗?我的意思是,我们在同一台机器上调用相同的Windows API,它可能会返回不同的结果 IEnumWbemClassObject* pEnumerator = NULL; HRESULT hres = pSvc->ExecQuery( bstr_t("WQL"

当有多个硬盘时,我使用以下代码获取硬盘的签名。IWbemServices->ExecQuery执行的从Win32_DiskDrive中选择*的结果具有这些磁盘信息的不同顺序。这合理吗?我的意思是,我们在同一台机器上调用相同的Windows API,它可能会返回不同的结果

    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();