我试图得到一个插入USB设备的“友好的名字”。我使用带有SetupDiGetDeviceRegistryProperty属性的SPDRP_FRIENDLYNAME方法,但是该方法返回false,并将错误代码设置为ERROR_INVALID_DATA,尽管其他属性(如SPDRP_DEVICEDESC或SPDRP_MFG )可以很好地工作。
我检查了注册表和设备管理器,并且存在友好的名称。
有人知道吗?
更新:到目前为止我尝试了什么:
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
}
}
}
就像这样。正如我所说,我得到了设备描述和设备制造商,但没有友好的名称。
发布于 2017-07-02 11:03:23
并非所有设备都设置了SPDRP_FRIENDLYNAME
属性。在这种情况下,ERROR_INVALID_DATA
就会被期望,它只会告诉您这一点。
当他们没有它时,设备管理器GUI使用另一个显示名称,SPDRP_DEVICEDESC
发布于 2018-03-14 13:50:41
也许有用的信息:
SPDRP_FRIENDLYNAME
时在设备管理器中显示为“. #2”的适配器才成功。SPDRP_FRIENDLYNAME
使用Windows 10时,功能总是成功的,但只适用于设备管理器中显示为"...#2“的设备。发布于 2019-11-05 00:44:02
这个问题主要归结于Windows 10阻止未签名的驱动程序安装,即使‘驱动程序’只是一个.inf文件,它只是引用一个(大概是签名的) windows,但它是为了将“unsigned”更改为对人类有意义的东西,并且可以被应用程序软件识别。因为这个问题,我不得不重写了10个不同的项目。
我现在必须检查具体的VID/PID,但是这不是未来的证据。
https://stackoverflow.com/questions/44850180
复制相似问题