Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/129.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Win32_物理媒体序列号有时顺序错误_C++_Wmi - Fatal编程技术网

C++ Win32_物理媒体序列号有时顺序错误

C++ Win32_物理媒体序列号有时顺序错误,c++,wmi,C++,Wmi,参考我修改了一段代码,这样我就可以检索硬盘序列号了 hres = pSvc->ExecQuery( bstr_t("WQL"), bstr_t("SELECT SerialNumber FROM Win32_PhysicalMedia"), WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY, NULL, &pEnumerator); .. ..<other code here&

参考我修改了一段代码,这样我就可以检索硬盘序列号了

hres = pSvc->ExecQuery(
    bstr_t("WQL"),
    bstr_t("SELECT SerialNumber FROM Win32_PhysicalMedia"),
    WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY, 
    NULL,
    &pEnumerator);
..
..<other code here>
..
hr = pclsObj->Get(L"SerialNumber", 0, &vtProp, 0, 0);
hres=pSvc->ExecQuery(
bstr_t(“WQL”),
bstr_t(“从Win32_PhysicalMedia中选择SerialNumber”),
WBEM_FLAG_仅前进| WBEM_FLAG_立即返回|,
无效的
&喷鼻器);
..
..
..
hr=pclsObj->Get(L“SerialNumber”,0,&vtProp,0,0);
我将vtProp.bstrVal转换为std::wstring并执行反向字符串,我必须从vtProp.bstrVal反转结果的原因是,我发现用于检索序列号的某些计算机顺序错误

例如: 计算机1返回序列:W[space]-DXW1M6EC01056,我必须做一个反向字符串,使其[space]WD-WXM1E60C0165,与硬盘上的标签比较后正确

但是当我用 计算机2返回序列号:WD-WXM1E60C0165(我使用相同的代码,当我检查硬盘上的序列号标签时,它实际上正确返回) 如果我的代码执行反向字符串,它将变为W[space]-DXW1M6EC01056

我用两台电脑都查了一下,都是小Endian,我不知道是否和Endian有关

是否有任何东西使返回结果按不同的顺序排列? 硬盘制造商/品牌?
我在Windows XP Pro中运行该程序以获取所有测试结果。

Microsoft知道:

其他堆栈覆盖的用户也是如此:


可能的重复看起来像是有人面临类似的问题,我想找到一种方法,了解与硬盘上的标签/贴纸相比,它在什么时候以及为什么有时顺序错误。我使用的返回序列号用于授权目的,如果机器/计算机总是返回错误的订单,则在我的授权机制比较HDD序列时可能会或可能不会导致任何问题。其中一篇链接文章有一个有效的解决方案。你不能依赖WMI。