64bit環境 WMIでマザーボード、バイオスIDの取得方法

解決


マサ  2011-01-25 02:58:02  No: 72225

64bit環境のPC上で、WMIでマザーボードとバイオスのIDを取得する必要があります。
32bit PCでは以下のコードで問題なく取得できたのですが、64bit環境では取得できませんでした。
(CPU IDなどは両環境で取得できました) 
64bit環境でWMIを使用してマザーボードとバイオスのIDを取得する方法をご存知の方がいましたら、
教えていただけないでしょうか?WMI以外でも取得方法がありましたら教えていただきたいです。
よろしくお願いたします。

開発言語:C++
マザーボードID:Win32_BaseBoard (SerialNumber)
バイオスID:Win32_BIOS (SerialNumber)

IWbemLocator*  pLoc = NULL;
IWbemServices*  pSvc = NULL;

--中略--

//マザーボードID取得
IEnumWbemClassObject* pEnumerator = NULL;
HRESULT hRes02 = pSvc->ExecQuery(
    bstr_t("WQL"), 
    bstr_t("Select * from Win32_BaseBoard"),
    WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY, 
    NULL,
    &pEnumerator);

if (SUCCEEDED(hRes02)) {

    IWbemClassObject *pclsObj = NULL;
    _bstr_t bstrCpuID;
    while (1)
    {
        ULONG uReturn;
        HRESULT hr = pEnumerator->Next(WBEM_INFINITE, 1, &pclsObj, &uReturn);

        if(0 == uReturn)
        {
            break;
        }

        VARIANT vtProp;
        VariantInit(&vtProp);
        hr = pclsObj->Get(L"SerialNumber", 0, &vtProp, 0, 0);
        if(vtProp.vt == 1) {
            break;
        }

        bstrCpuID = vtProp;
        char* p = bstrCpuID;
        strMbId = CString(p);    //取得
        break;
    }
    if(pclsObj) pclsObj->Release();
}


gak  2011-01-26 03:30:47  No: 72226

多分同じコードをvs2008で組んで試してみたけど、64BitVistaで”SerialNumber”を含む他情報は取れた。
32bitアプリとしてビルドしたexeをWOW64上で動かした時も、64Bitアプリとしてビルドしたexeを64BitVistaで動かした時も同じ結果が取れた。

http://msdn.microsoft.com/en-us/library/aa390789%28v=VS.85%29.aspx
上記ページに判りやすい図が載ってるけど、WOW64上で動いている32Bitアプリはデフォルトでは64BitOSの素?のレジストリ領域を見に行かない模様。
> 32bit PCでは以下のコードで問題なく取得できたのですが、64bit環境では取得できませんでした。
32bit環境では”素のレジストリ”を参照していたので情報を得られた。64bit環境では上記ページの図でいう”Registry WOW6432Node”を参照した。
だが”Registry WOW6432Node”には”素のレジストリ”にはあるのと同じ情報が登録されていなかったので失敗した。
とか仮定はできないだろうか?
改めてだけど、俺の環境では 32/64 bitアプリ共に情報取れてるポイ。よって↑は「マサさんの環境では」という仮定。

http://msdn.microsoft.com/en-us/library/aa393067%28v=VS.85%29.aspx
デフォルト参照先以外のレジストリを参照する為の情報…だと思われる(内容確認まではしてないんで…違ったらゴメン)


マサ  2011-02-01 00:56:38  No: 72227

返信遅れて申し訳ありません。ありがとうございます。
環境によって取れたり取れなかったり、ということだと少し困ります。
上記のリンク先を熟読させていただきます。

PC単位でユニークな情報がほしかったので、マザーボードとバイオスのIDのシリアル値を使用しようとしましたが、他のユニークな値が使用できないかも含めて考え直そうと思います。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加