Win32_PhysicalMedia SerialNumber有时排序错误

时间:2012-06-28 02:42:54

标签: c++ wmi

参考MSDN我修改了abit代码,以便我可以检索硬盘序列号

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

我将vtProp.bstrVal转换为std :: wstring并执行反向字符串,我必须从vtProp.bstrVal反转结果的原因是因为我发现我用来检索序列号的某些计算机的顺序错误

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

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

我检查两台计算机,它是Little-Endian,我不知道它是否与Endianness有关。

有什么东西使得返回结果的顺序不同吗? 硬盘制造商/品牌? 我在Windows XP Pro中运行该程序以获取所有测试结果。