Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 为什么微软';s自己的USB-CDC驱动程序拒绝注册GUID\u DeviceInterface\u COMPORT接口?_Windows_Device Driver - Fatal编程技术网

Windows 为什么微软';s自己的USB-CDC驱动程序拒绝注册GUID\u DeviceInterface\u COMPORT接口?

Windows 为什么微软';s自己的USB-CDC驱动程序拒绝注册GUID\u DeviceInterface\u COMPORT接口?,windows,device-driver,Windows,Device Driver,所谓微软的USB-CDC设备驱动程序,我指的是usbser.inf和usbser.sys 但是,这些CDC“虚拟COM端口设备”未注册为GUID\u DeviceInterface\u COMPORT设备接口类。也就是说,通过使用 SetupDiGetClassDevs(&GUID_DEVINTERFACE_COMPORT, NULL, NULL, DIGCF_DEVICEINTERFACE|DIGCF_PRESENT); 我们无法通过枚举找到CDC COM端口 只有通过GUID\u

所谓微软的USB-CDC设备驱动程序,我指的是usbser.inf和usbser.sys

但是,这些CDC“虚拟COM端口设备”未注册为GUID\u DeviceInterface\u COMPORT设备接口类。也就是说,通过使用

SetupDiGetClassDevs(&GUID_DEVINTERFACE_COMPORT, NULL, NULL, DIGCF_DEVICEINTERFACE|DIGCF_PRESENT);
我们无法通过枚举找到CDC COM端口

只有通过GUID\u DEVCLASS\u PORTS device setup class枚举才能找到那些CDC COM端口,即

SetupDiGetClassDevs(&GUID_DEVCLASS_PORTS, NULL, NULL, DIGCF_PRESENT);
这显然违反了微软在MSDN中的说法,微软在第(1)点中告诉我们COM端口设备必须注册GUID\u DeviceInterface\u COMPORT

从Windows 2000开始,COM端口是一种 符合以下附加要求:

  • (1) 您可以通过COM端口设备接口类的实例访问COM端口。此类的GUID为 GUID\u DeviceInterface\u COMPORT,在Ntddser.h中定义
  • (2) 您可以使用Ntddser.h中定义的16550 UART兼容接口来操作COM端口
  • (3) 为确保与大多数访问COM端口的应用程序兼容,应指定使用标准的符号链接名称 命名约定“COM”,其中是COM端口号(用于 例如,COM1)。如果使用COM名称,则必须获取COM端口 COM端口数据库中的编号。COM端口号应仅为 与COM名称一起使用
有一个著名的网页显示了枚举COM端口的多种方法

  • 它的UsingSetupAPI1()是GUID\u DeviceInterface\u COMPORT枚举方法
  • 它的UsingSetupAPI2()是GUID\u DEVCLASS\u端口枚举方法

那么为什么微软坚持要违反他自己所说的,直到Windows10。还是我误解了什么?

我列举了
GUID\u deviceinterface\u COMPORT
,我相信我从来没有遇到过这个问题。呼叫是否失败、未返回结果或返回的结果不是您想要的USB CDC?USB设备报告了哪些描述符(特别是它报告为调制解调器还是复合设备)?恐怕您误解了上下文。请仔细检查它是由Microsoft usbser.sys驱动的USB-CDC设备,并且您正确理解了代码。如果它真的是一个USB-CDC设备,那么Windows 10有一个可用的驱动程序(usbser.inf,usbser.sys),但Windows 7/8.1没有可用的usbser.inf。好吧,我写了一个com端口枚举库,我使用的是一个FTDI转换器,它不使用usbser.sys,然后我的同事将它与一个使用usbser.sys的USB CDC设备一起使用,起初他遇到了问题,但后来他发现设备端缺少了一些东西(要么是一些CDC消息类型没有被处理,要么是CDC子类出错,或者诸如此类),在修复之后,事情开始顺利进行。因此,请注意CDC规范中所说的可选函数——当由usbser.sysDo控制时,它们实际上可能不是可选的。请区分“类”和“接口”这两个词。sys是一个类驱动程序,它为多个串行端口提供服务。由设备制造商提供接口。继续阅读同一页:“Ports device setup类的类安装程序和串行函数驱动程序的组合操作将设备配置为COM端口”。两个司机。如果他没有正确地这样做(他们曾经这样做过吗),那么接下来调用SetupDiEnumDeviceInfo()是获取每个端口信息的另一种方法。但是,您能给我看一个真实世界的驱动程序示例(引用制造商的设备型号)吗?它与usbser.sys一起工作,并且正确注册了GUID\u DeviceInterface\u COMPORT?我们都知道,如果没有真正的工作示例,学习Windows驱动程序开发是不可能的。我列举了
GUID\u deviceinterface\u COMPORT
,我相信我从来没有遇到过这个问题。呼叫是否失败、未返回结果或返回的结果不是您想要的USB CDC?USB设备报告了哪些描述符(特别是它报告为调制解调器还是复合设备)?恐怕您误解了上下文。请仔细检查它是由Microsoft usbser.sys驱动的USB-CDC设备,并且您正确理解了代码。如果它真的是一个USB-CDC设备,那么Windows 10有一个可用的驱动程序(usbser.inf,usbser.sys),但Windows 7/8.1没有可用的usbser.inf。好吧,我写了一个com端口枚举库,我使用的是一个FTDI转换器,它不使用usbser.sys,然后我的同事将它与一个使用usbser.sys的USB CDC设备一起使用,起初他遇到了问题,但后来他发现设备端缺少了一些东西(要么是一些CDC消息类型没有被处理,要么是CDC子类出错,或者诸如此类),在修复之后,事情开始顺利进行。因此,请注意CDC规范中所说的可选函数——当由usbser.sysDo控制时,它们实际上可能不是可选的。请区分“类”和“接口”这两个词。sys是一个类驱动程序,它为多个串行端口提供服务。由设备制造商提供接口。继续阅读同一页:“Ports device setup类的类安装程序和串行函数驱动程序的组合操作将设备配置为COM端口”。两个司机。如果他没有正确地这样做(他们曾经这样做过吗),那么接下来调用SetupDiEnumDeviceInfo()是获取每个端口信息的另一种方法。但是,您能给我看一个真实世界的驱动程序示例(引用制造商的设备型号)吗?它与usbser.sys一起工作,并且正确注册了GUID\u DeviceInterface\u COMPORT?我们都知道,如果没有真正的工作,学习Windows驱动程序开发是不可能的