我GetRawInputDeviceInfo
用来获取 USB HID 设备名称的设备名称。
\??\
出于某种原因,当我在 Windows XP 下运行我的代码时,我得到一个以而不是开头的设备名称\\?\
。
这当然意味着,当我尝试使用此设备名称时(CreateFile
例如“它不起作用。如果我编辑设备名称并手动修复它以使\\?\
一切正常。
这在 Windows 7 中不会发生。在 Win7 中一切正常。
GetLastError
我还在每次 API 调用后进行测试,并且没有发生错误。
我所有的操作系统都是 32 位的,我的项目是用 unicode 编译的。
任何建议我做错了什么?这是我的控制台应用程序中获取设备名称的代码片段。
nResult = GetRawInputDeviceInfo( pDeviceList[i].hDevice, RIDI_DEVICENAME, NULL, &nBufferSize );
if( nResult < 0 )
{
cout << "ERR: Unable to get Device Name character count.." << endl;
return false;
}
WCHAR* wcDeviceName = new WCHAR[ nBufferSize + 1 ];
if( wcDeviceName == NULL )
{
cout << "ERR: Unable to allocate memory for Device Name.." << endl;
return false;
}
nResult = GetRawInputDeviceInfo( pDeviceList[i].hDevice, RIDI_DEVICENAME, wcDeviceName, &nBufferSize );
if( nResult < 0 )
{
cout << "ERR: Unable to get Device Name.." << endl;
delete [] wcDeviceName;
return false;
}
wcDeviceName[1]='\\';
//This is the manual fix for the device name in WinXP. How do I get rid of it????
pDesc->hHandle = CreateFile(wcDeviceName, GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING, NULL, NULL);
...
...