首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Windows中获得USB设备的友好名称?

如何在Windows中获得USB设备的友好名称?
EN

Stack Overflow用户
提问于 2017-06-30 15:35:35
回答 3查看 4K关注 0票数 2

我试图得到一个插入USB设备的“友好的名字”。我使用带有SetupDiGetDeviceRegistryProperty属性的SPDRP_FRIENDLYNAME方法,但是该方法返回false,并将错误代码设置为ERROR_INVALID_DATA,尽管其他属性(如SPDRP_DEVICEDESC或SPDRP_MFG )可以很好地工作。

我检查了注册表和设备管理器,并且存在友好的名称。

有人知道吗?

更新:到目前为止我尝试了什么:

代码语言:javascript
运行
复制
GUID hidGuid;
HidD_GetHidGuid(&hidGuid);

HDEVINFO hDevInfo = SetupDiGetClassDevs(&hidGuid, 0, 0, DIGCF_PRESENT | DIGCF_INTERFACEDEVICE);

if (INVALID_HANDLE_VALUE == hDevInfo)
{
    AfxMessageBox(CString("SetupDiGetClassDevs(): ")
        + _com_error(GetLastError()).ErrorMessage(), MB_ICONEXCLAMATION);
    return;
}
SP_DEVINFO_DATA* pspDevInfoData =
    (SP_DEVINFO_DATA*)HeapAlloc(GetProcessHeap(), 0, sizeof(SP_DEVINFO_DATA));
pspDevInfoData->cbSize = sizeof(SP_DEVINFO_DATA);
for (int i = 0; SetupDiEnumDeviceInfo(hDevInfo, i, pspDevInfoData); i++)
{
    DWORD DataT;
    DWORD nSize = 0;
    TCHAR buf[MAX_PATH];
if (!SetupDiGetDeviceInstanceId(hDevInfo, pspDevInfoData, buf, sizeof(buf), &nSize))
    {
        AfxMessageBox(CString("SetupDiGetDeviceInstanceId(): ")
            + _com_error(GetLastError()).ErrorMessage(), MB_ICONEXCLAMATION);
        break;
    }
if (SetupDiGetDeviceRegistryProperty(hDevInfo, pspDevInfoData,
                    SPDRP_FRIENDLYNAME, &DataT, (PBYTE)buf, sizeof(buf), &nSize))
    { 
           //display buf
    }
else
    {
        if (GetLastError() == ERROR_INVALID_DATA)
        {
            //display ERROR_INVALID_DATA
        }
        if (SetupDiGetDeviceRegistryProperty(hDevInfo, pspDevInfoData, SPDRP_MFG, &DataT, (PBYTE)buf, sizeof(buf), &nSize))
        {
            //display buf
        }
        if (SetupDiGetDeviceRegistryProperty(hDevInfo, pspDevInfoData,
                SPDRP_DEVICEDESC, &DataT, (PBYTE)buf, sizeof(buf), &nSize))
        {
            // display buf
        }
   }
}

就像这样。正如我所说,我得到了设备描述和设备制造商,但没有友好的名称。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-07-02 11:03:23

并非所有设备都设置了SPDRP_FRIENDLYNAME属性。在这种情况下,ERROR_INVALID_DATA就会被期望,它只会告诉您这一点。

当他们没有它时,设备管理器GUI使用另一个显示名称,SPDRP_DEVICEDESC

票数 2
EN

Stack Overflow用户

发布于 2018-03-14 13:50:41

也许有用的信息:

  1. 在我的例子中,我有两个网络适配器,但是这个函数只在使用SPDRP_FRIENDLYNAME时在设备管理器中显示为“. #2”的适配器才成功。
  2. 我还可以验证另一个适配器(没有“. #2")在它的注册表数据中没有值"FriendlyName”。
  3. 这种行为似乎取决于O/S,在可能的情况下,当SPDRP_FRIENDLYNAME使用Windows 10时,功能总是成功的,但只适用于设备管理器中显示为"...#2“的设备。
票数 0
EN

Stack Overflow用户

发布于 2019-11-05 00:44:02

这个问题主要归结于Windows 10阻止未签名的驱动程序安装,即使‘驱动程序’只是一个.inf文件,它只是引用一个(大概是签名的) windows,但它是为了将“unsigned”更改为对人类有意义的东西,并且可以被应用程序软件识别。因为这个问题,我不得不重写了10个不同的项目。

我现在必须检查具体的VID/PID,但是这不是未来的证据。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44850180

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档