我为一个自定义设备制作了一个签名的USB串行inf文件,并创建了一个安装程序,成功地将驱动程序安装到Windows 7(32/64)、Windows 8.1(64),但不是Windows 10。这适用于使用设备管理器和PNPUTIL直接在文件上进行的默认安装(右键单击、安装)。设备驱动程序已成功安装,但使用OEM usbser驱动程序。单击"更新驱动程序"并在设备管理器中选择我的驱动程序后,Windows会提示我"已为您的设备安装了最佳驱动程序软件"。如果我使用设备管理器并选择"拥有磁盘",我可以成功地绕过Windows 10强制执行自己的驱动程序的问题。不过,这并没有让我更接近于拥有一个成功的inf文件和安装程序。
我的默认安装过程:
- 从USB端口拔下设备
- 加载新安装的Windows 10 Professional的快照
- 右键单击,安装在.inf文件上
- 插入设备
- 查看设备管理器,发现使用的是Microsoft制作的标准USB串行设备驱动程序,而不是我的驱动程序
如果我卸载它并重复步骤3-5,它有时会让我的自定义驱动程序卡住。
有人告诉我,我的驱动程序安装在Windows 10 Enterprise上,这让事情更加混乱。
问题:我做错了什么
我的inf文件:
;************************************************************
; Windows USB CDC ACM Setup File
; Copyright (c) 2000 Microsoft Corporation
; Version v1.1, updated 17 April 2013
[Strings]
DriverPackageDisplayName="Rinstrum USB Serial Drivers"
ManufacturerName="Rinstrum"
ServiceName="USB RS-232 Emulation Driver"
linux.gserial="Rinstrum USB Gadget Serial"
MFGNAME="Rinstrum"
[DefaultInstall]
CopyINF=c500.inf
[Version]
DriverVer=03/02/2017,1.0.0.0
Signature=$Windows NT$
Class=Ports
ClassGuid={4D36E978-E325-11CE-BFC1-08002BE10318}
Provider=%MFGNAME%
CatalogFile=c500.cat
DriverPackageDisplayName=%DriverPackageDisplayName%
PnpLockdown=1
[Manufacturer]
%MFGNAME%=Models,NTx86,NTamd64,NTarm
[DestinationDirs]
DefaultDestDir=12
FakeModemCopyFileSection=12
[Models.NTx86]
%linux.gserial%=DriverInstall, USBVID_1FC9&PID_816A, USBVID_1FC9&PID_816A&MI_00
[Models.NTamd64]
%linux.gserial%=DriverInstall, USBVID_1FC9&PID_816A, USBVID_1FC9&PID_816A&MI_00
[Models.NTarm]
%linux.gserial%=DriverInstall, USBVID_1FC9&PID_816A, USBVID_1FC9&PID_816A&MI_00
[DriverInstall]
Include=mdmcpq.inf
CopyFiles=FakeModemCopyFileSection
AddReg=DriverAddReg
[DriverAddReg]
HKR,,DevLoader,,*ntkern
HKR,,NTMPDriver,,%DRIVERFILENAME%.sys
HKR,,EnumPropPages32,,"MsPorts.dll,SerialPortPropPageProvider"
[DriverInstall.Services]
Include=mdmcpq.inf
AddService=usbser,0x2,DriverService
[DriverService]
DisplayName=%ServiceName%
ServiceType=1
StartType=3
ErrorControl=1
ServiceBinary=%12%usbser.sys
LoadOrderGroup=Base
更新:setupapi.dev.log 的附加信息
>>> [Device Install (DiInstallDriver) - C:UsersR&DDesktopc500.inf]
>>> Section start 2017/02/03 17:17:58.321
cmd: "C:WindowsSystem32InfDefaultInstall.exe" "C:UsersR&DDesktopc500.inf"
ndv: Flags: 0x00000000
ndv: INF path: C:UsersR&DDesktopc500.inf
inf: {SetupCopyOEMInf: C:UsersR&DDesktopc500.inf} 17:17:58.337
inf: Copy style: 0x00000000 !
inf: Driver package is already in driver store
inf: Driver Store Path: C:WindowsSystem32DriverStoreFileRepositoryc500.inf_amd64_4fee793fb11027acc500.inf inf: Published Inf Path: C:WindowsINFoem4.inf
inf: {SetupCopyOEMInf exit (0x00000000)} 17:17:58.368
<<< Section end 2017/02/03 17:17:58.399
<<< [Exit status: SUCCESS]
更新:setupapi.dev.log在尝试安装设备时出现以下错误
sig: Success: File is signed in Authenticode(tm) catalog.
sig: Error 0xe0000242: The publisher of an Authenticode(tm) signed catalog has not yet been established as trusted.
更新:VBox来宾添加安装程序设法在WIN10中安装我的inf文件。以下是来源:
https://www.virtualbox.org/browser/vbox/trunk/src/VBox/Additions/WINNT/Installer/VBoxDrvInst.cpp#L433
在授予用户覆盖Windows 10中OEM驱动程序的权限之前,需要激活Windows。在我的测试机上激活窗口解决了这个问题。
尝试使用今天的日期和1.0.0.0正确设置DriverVer
指令。Windows在决定使用什么驱动程序时会考虑日期。