【问题标题】:usbser.sys mdmcpq.inf issues with cable detachusbser.sys mdmcpq.inf 电缆分离问题
【发布时间】:2018-07-31 12:33:46
【问题描述】:

我使用 PIC18F67J94 设计了一个嵌入式系统,并使用了随机 VID 和 PID。然后我使用 Zadig 为硬件生成了一个 USB CDC 驱动程序。它使用 mdmcpq.inf 和 usbser.sys。以下是 Zadig 制作的 .inf 文件,对供应商名称进行了一些修改

[Strings]
SNMPMOD = "SNMP-Modbus Converter"
VendorName = "ABCD"
SourceName = "ABCD Install Disk"
SNMPMODID   = "VID_8474&PID_0005"
DeviceGUID = "{6097438F-67AB-4C8C-A8C5-AF92EE79D3DF}"
Service    = "USB COM Port"

[Version]
Signature   = "$Windows NT$"
Provider = "ABCD"
Class       = Ports
ClassGuid   = {4D36E978-E325-11CE-BFC1-08002BE10318}
CatalogFile = ABCD.cat
DriverVer   = 04/11/2018, 1.0.0.6

[ControlFlags]
ExcludeFromSelect=*

[Manufacturer]
%VendorName% = DeviceList,NTx86,NTamd64

[DeviceList.NTx86]
%SNMPMOD% = UsbSer_Install, USB\%SNMPMODID%

[DeviceList.NTamd64]
%SNMPMOD% = UsbSer_Install, USB\%SNMPMODID%

[UsbSer_Install]
include     = mdmcpq.inf
CopyFiles   = FakeModemCopyFileSection
AddReg      = UsbSer_Install.AddReg
AddProperty = UsbSer_AddProperty

[UsbSer_Install.AddReg]
HKR,,DevLoader,,*ntkern
HKR,,NTMPDriver,,usbser.sys
HKR,,EnumPropPages32,,"MsPorts.dll,SerialPortPropPageProvider"

[UsbSer_Install.Services]
AddService = usbser,0x00000002,UsbSer_Service

[UsbSer_Service]
DisplayName   = %Service%
ServiceType   = 1
StartType     = 3
ErrorControl  = 1
ServiceBinary = %12%\usbser.sys
LoadOrderGroup = Base

[UsbSer_AddProperty]
GenericDriverInstalled,,,,1

[DestinationDirs]
DefaultDestDir = 12

[SourceDisksNames]
1 = %SourceName%

它创建了一个 COM 端口并且工作正常,但如果我在不关闭 COM 端口的情况下移除设备然后重新连接设备,设备管理器会显示要连接的设备和 com 端口号,但该 com 端口不再使用终端软件访问。

然后我必须再次移除设备,然后重新连接设备,然后它会创建一个有效的 com 端口。

我也使用过 FTDI 设备和 Prolific Technology 设备,它们都没有这些问题。

Prolific 使用 ser2pl.sys,因为 FTDI 有自己的 .sys 文件。

我想知道在设备断开连接时是否可以让 windows 以某种方式关闭 COM 端口。

【问题讨论】:

    标签: usb cdc


    【解决方案1】:

    据我所知,对于在 Windows 10 之前的 Windows 版本上使用 usbser.sys 的任何设备来说,这是一个不可避免的问题。(很高兴您发布了有关驱动程序的详细信息,但我不这么认为在这种情况下很重要。)

    您可以使用WinObj 程序检查由usbser.sys 等驱动程序创建的COM 端口对象,您会看到驱动程序无法销毁COM 端口,直到使用它的程序关闭其句柄。因此,当设备在旧 COM 端口关闭之前再次插入时,驱动程序无法创建具有正确名称的 COM 端口,因为旧对象仍在附近。

    当他们重写 usbser.sys 时,他们实际上在 Windows 10 中修复了这个问题,所以你可以升级到 Windows 10。如果我没记错的话,你所要做的就是关闭旧实例的句柄COM 端口的;您不必再断开设备。此外,Windows 10 附带一个名为 usbser.inf 的 Microsoft 驱动程序,因此您无需生成自己的驱动程序。

    (顺便说一句,如果您打算将此设备运送给用户,我希望您购买自己的供应商 ID。使用随机供应商 ID 会导致冲突,如果发生冲突,则会干扰您的设备或其他设备的功能。用户两者都有。)

    【讨论】:

      猜你喜欢
      • 2021-01-28
      • 2016-08-04
      • 1970-01-01
      • 2015-07-14
      • 2019-09-25
      • 2015-04-20
      • 2023-03-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多