通过说微软的USB-CDC设备驱动程序,我的意思是usbser.inf和usbser.sys。
但是,这些CDC“虚拟COM端口设备”未注册 GUID_DEVINTERFACE_COMPORT device-interface-class 。也就是说,通过使用
SetupDiGetClassDevs(&GUID_DEVINTERFACE_COMPORT, NULL, NULL, DIGCF_DEVICEINTERFACE|DIGCF_PRESENT);
我们无法通过枚举找到CDC COM端口。
只有当我们通过 GUID_DEVCLASS_PORTS设备设置类进行枚举时,我们才能找到那些CDC COM端口,即
SetupDiGetClassDevs(&GUID_DEVCLASS_PORTS, NULL, NULL, DIGCF_PRESENT);
这显然违反了Microsoft在MSDN Configuration of COM Ports中所说的内容,它在第(1)点告诉我们COM端口设备必须注册 GUID_DEVINTERFACE_COMPORT 。
从Windows 2000开始,COM端口是一种串行端口 符合以下附加要求:
- (1)通过COM端口设备接口类的实例访问COM端口。这个类的GUID是 GUID_DEVINTERFACE_COMPORT,在Ntddser.h中定义。
- (2)使用Ntddser.h中定义的16550 UART兼容接口操作COM端口。
- (3)为确保与访问COM端口的大多数应用程序兼容,您应分配使用该标准的符号链接名称 命名约定“COM”,其中是COM端口号(for 例如,COM1)。如果使用COM名称,则必须获取COM端口 COM端口数据库中的数字。 COM端口号应该只是 与COM名称一起使用。
有一个着名的网页http://www.naughter.com/enumser.html,它显示了枚举COM端口的多种方法。
那么为什么微软坚持要违反他自己所说的话,直到Windows 10。或者我误解了什么?