如何从Win32 API中的总线关系获取设备实例路径

问题描述

是否有很好的方法从总线关系(例如:{0.0.1.00000000}。{4234a4c6-3535-495-6-d6-971c-76ce1f22521e})中获取设备实例路径(例如:USB \ VID_021D&PID_0C51&MI_00 \ 6&192CE49&4&0000)? >

我意识到Windows中的某些术语具有别名,即“设备实例路径”和“总线关系”,我的意思是在设备管理器中找到两个属性:

enter image description here

我尝试从PropertyStore

获取设备实例路径
int getProperty(std::string& sampleID)
{
   HRESULT hr = S_OK;
   IMMDeviceEnumerator* pEnumerator = NULL;


   //CoInitializeEx(NULL,COINIT_APARTMENTTHREADED);

   hr = CoCreateInstance(__uuidof(MMDeviceEnumerator),NULL,CLSCTX_INPROC_SERVER,__uuidof(IMMDeviceEnumerator),(void**)&pEnumerator);

   if (hr != S_OK)
   {
       // error cleanup
       return hr;
   }

   IMMDevice* pEndpoint = NULL;
   std::wstring wSampleID(sampleID.begin(),sampleID.end());
   hr = pEnumerator->GetDevice(wSampleID.c_str(),&pEndpoint);
   if (hr != S_OK || pEndpoint == NULL)
   {
       // error cleanup
       return hr;
   }

   if (!pEndpoint)
   {
       // error cleanup
       return hr;
   }

   IPropertyStore* pProps = NULL;
   hr = pEndpoint->OpenPropertyStore(
       STGM_READ,&pProps);

   PROPVARIANT varName;
   // Initialize container for property value.
   PropVariantInit(&varName);

   hr = pProps->GetValue(
       PKEY_AudioEndpoint_GUID,&varName);
   if (hr != S_OK)
   {
       //error cleanup
       return hr;
   }
   std::cout << varName.pwszVal << std::endl;

   PropVariantClear(&varName);
   SAFE_RELEASE(pProps)
   SAFE_RELEASE(pEndpoint)
   SAFE_RELEASE(pEnumerator);
   return hr;
}

,但是似乎没有属性键可为Audio Endpoint IMMDevice检索此信息。任何建议表示赞赏。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)