2

Windows の [デバイス マネージャー] に移動し、リスト内の (ほぼ) 任意のデバイスをクリックすると、[全般] タブの 1 つの情報が [場所] と呼ばれます。これは、次のいずれかの文字列です。

  • 「NVIDIA GeForce GTX 1080 で」のように人間が読める形式
  • 「ロケーション 0 (Internal High Definition Audio Bus)」や「PCI バス 9、デバイス 0、機能 0」など、ある程度は便利です。
  • 「Port_#0004.Hub_#0015」または「0009.0000.0000.004.000.000.000.000.000」のような USB の場所

この情報は、Windows の統合デバイス プロパティ モデルAPI を通じて入手できます。

私が探しているのは、特定のIMFActivateオブジェクトからその情報を取得することです。

そうする方法はありますか?そのアクティベーション オブジェクトから「デバイス」情報を取得する方法が見つかりません。私が持っている唯一のデータは「シンボリックリンク」(私の場合、この文字列 : \\?\usb#vid_04b4&pid_8888&mi_00#9&4fe28be&0&0000#{e5323777-f976-4f5b-9b55-b94699c46e44}\global) ですが、そのリンクの形式は「場所」に表示される文字列とはまったく異なります。

IMFActivateしたがって、私の質問:オブジェクトを指定して、デバイスの「場所」文字列を取得する方法は?

アップデート

setup-api 関数で認識可能なデバイス ID 文字列に提供されたシンボリック リンクを「変換」しIMFActivate、「場所の文字列」を抽出するために使用しているコードを次に示します。

CString symLink2Location(const CString & _symLink)
{
    DEVINST di;
    CString devId = _symLink;
    devId = devId.Left( devId.Find(L"#{") );
    devId.Replace(L"\\\\?\\", L"");
    devId.Replace(L"#", L"\\");
    const auto rc = CM_Locate_DevNodeW(&di, devId.GetBuffer(), CM_LOCATE_DEVNODE_NORMAL);
    if(rc == CR_SUCCESS){
        DEVPROPTYPE dpt;
        ULONG sz = MAX_PATH;
        WCHAR prop[MAX_PATH];
        if(CM_Get_DevNode_PropertyW(di, &DEVPKEY_Device_LocationInfo, &dpt, (PBYTE)&prop, &sz, 0) == CR_SUCCESS){
            if(dpt == DEVPROP_TYPE_STRING){
                return prop;
            }
        }
    }
    return L"";
}

更新 2

devmgmt.msc「サウンド、ビデオ、およびゲーム コントローラー」の下にある 3 つのオーディオ入力デバイスを次に示します。

  • MS LifeCam Cinema (TM)、場所: 0000.0014.0000.013.003.000.000.000.000 (symlink: \\?\SWD#MMDEVAPI#{0.0.1.00000000}.{751fe058-cef2-4d28-bbeb-e438981938d7}#{2eef81be-33fa-4800-9670-1cd474972c3f})
  • MS LifeCam Studio (TM)、場所: 0000.0014.0000.013.004.004.000.000.000 (symlink: \\?\SWD#MMDEVAPI#{0.0.1.00000000}.{59267d2e-940b-45f5-8655-45372787bd85}#{2eef81be-33fa-4800-9670-1cd474972c3f})
  • SUB2r USB 3.0 HD ウェブカメラ、場所: 0009.0000.0000.004.000.000.000.000.000 (シンボリックリンク: \\?\SWD#MMDEVAPI#{0.0.1.00000000}.{26a4f608-cbd8-4206-b958-d57ee6847153}#{2eef81be-33fa-4800-9670-1cd474972c3f})

3 つすべてが USB デバイスであり、呼び出し時に 3 つすべてがリストされますMFEnumDeviceSourcesが、それらの「シンボリック リンク」はハードウェア デバイスに解決されません。

4

1 に答える 1