【发布时间】:2012-06-29 13:05:58
【问题描述】:
参考MSDN我修改了代码以便我可以检索硬盘序列号
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[space]-DXW1M6EC01056,我必须做一个反向字符串才能使其 [space]WD-WXM1E60C0165 与标签比较后正确硬盘
但是当我用 计算机2返回序列:WD-WXM1E60C0165(我使用相同的代码,当我检查硬盘上的序列标签时它实际上返回正确) 如果我的代码做一个反向字符串,它将变成 W[space]-DXW1M6EC01056
我查了两台电脑,都是Little-Endian,不知道跟Endianness有没有关系。
有什么东西使返回结果的顺序不同吗? 硬盘制造商/品牌? 我在 Windows XP Pro 中运行程序以获得所有测试结果。
【问题讨论】:
-
看起来有人面临类似的问题,我想找到一种方法来了解与 HDD 上的标签/贴纸相比,它何时以及为什么有时顺序错误。我使用的返回序列号用于许可目的,如果机器/计算机总是返回错误的订单,当我的许可机制比较硬盘序列时,它可能会也可能不会导致任何问题。
-
其中一篇链接的文章有一个可行的解决方案。你不能依赖 WMI。