一直用一个电脑端,识别USB转串口的函数接口,但在Silicon Labs CP210x USB to UART Bridge上,却无法成功识别。确认过Silicon Labs CP210x USB to UART Bridge和Prolific USB-to-Serial Comm Port的GUID是一样的,没有办法解决,最后只能曲线救国,更换新的接口来操作。
先贴出,不能生效的函数接口:
1. GUID和设备管理器中,驱动的GUID是一样的。
DEFINE_GUID(GUID_DEVINTERFACE_SERENUM_BUS_ENUMERATOR, 0x4d36e978L, 0xe325, 0x11ce, 0xbf, 0xc1, 0x08, 0x00, 0x2b, 0xe1, 0x03, 0x18);
2. bOk = SetupDiEnumDeviceInterfaces(hDevInfo, NULL, guidDev, ii, &ifcData); 该函数一直返回false,而Prolific USB-to-Serial Comm Port的串口返回true。
// Helpers for EnumSerialPorts
void EnumPortsWdm(CArray<SSerInfo,SSerInfo&> &asi)
{
CString strErr;
// Create a device information set that will be the container for
// the device interfaces.
//GUID *guidDev = (GUID*) &GUID_CLASS_COMPORT;
GUID *guidDev = (GUID *) &GUID_DEVINTERFACE_SERENUM_BUS_ENUMERATOR;
HDEVINFO hDevInfo = INVALID_HANDLE_VALUE;
SP_DEVICE_INTERFACE_DETAIL_DATA *pDetData = NULL;
try {
hDevInfo = SetupDiGetClassDevs( guidDev,
NULL,
NULL,
DIGCF_PRESENT | DIGCF_DEVICEINTERFACE
);
if(hDevInfo == INVALID_HANDLE_VALUE)
{
strErr.Format("SetupDiGetClassDevs failed. (err=%lx)",
GetLastError());
throw strErr;
}
// Enumerate the serial ports
BOOL bOk = TRUE;
SP_DEVICE_INTERFACE_DATA ifcData;
DWORD dwDetDataSize = siz