为什么Microsoft自己的USB-CDC驱动程序拒绝注册GUID_DEVINTERFACE_COMPORT接口?

时间:2016-09-05 03:15:17

标签: windows device-driver

通过说微软的USB-CDC设备驱动程序,我的意思是usbser.inf和usbser.sys。

usbser.sys driver on Windows 10

但是,这些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端口的多种方法。

  • 其UsingSetupAPI1()是GUID_DEVINTERFACE_COMPORT枚举方法。
  • 其UsingSetupAPI2()是GUID_DEVCLASS_PORTS枚举方法。

那么为什么微软坚持要违反他自己所说的话,直到Windows 10。或者我误解了什么?

0 个答案:

没有答案