MSDNを参照して、HDDのシリアル番号を取得できるようにコードを変更します
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
しかし、コンピューター2のリターンシリアルでテストすると、WD-WXM1E60C0165(同じコードを使用します。HDDのシリアルラベルを確認すると、実際には正しく返されます)コードが逆の文字列を実行すると、W [スペース]になります-DXW1M6EC01056
両方のコンピューターで確認しましたが、リトルエンディアンです。エンディアンと関係があるかどうかはわかりません。
返される結果を異なる順序にするものはありますか? HDDのメーカー・ブランドは?すべてのテスト結果について、Windows XP Pro でプログラムを実行しました。