> 技术文档 > linusb + Zadig 2.x - 用户指南

linusb + Zadig 2.x - 用户指南


Zadig 2.x - 用户指南

(2021 年 8 月 4 日 00:00:00)

目录

基本用法

高级用法

zadig.ini 文件示例

zadig 预设设备配置文件示例

防止替换 Zadig libusbK USB 设备动程

问题

解决方法

能的预防措施

过程和诊断详情

 

基本用法

在最简单的操作模式下,Zadig 用于为尚未安装兼容 libusb 驱动的设备安装该驱动。

以下是典型驱动安装的概述:

启动 Zadig 时,首先会看到用户账户控制提示(如下所示)。这是因为该应用程序需要以管理员权限运行。要能够安装驱动程序,应选择 “是”。
 

界面示例:用户账户控制提示

 

应用程序运行后,USB 设备会出现在下拉列表中(点击下拉列表可查看所有设备)。也可在 Zadig 运行后插入 USB 设备,列表会自动刷新。建议只保留目标设备,拔掉其他 USB 设备。

界面示例:Zadig 设备选择界面

供应商 ID(“VID”,此处为 “0x045E”)、产品 ID(“PID”,此处为 “0x289”)及(可选)接口 ID(“MI”)显示在 “USB ID” 下方。鼠标悬停在供应商 ID 上可显示供应商全名,若名称未知,会出现向 USB ID 库报告的按钮。

救命!我的设备没有出现在列表中!!

若设备未在列表中,可能已安装驱动,替换时需谨慎(可能导致其他应用或系统无法访问)。例如,替换 USB 键盘 / 鼠标驱动后,仅能用于自定义应用,无法在 Windows 中输入。

界面示例:已安装驱动的设备显示

选)选中设备后,点击 “编辑” 可修改名称(将显示在设备管理器等位置)。可根据应用类型选择驱动:“WinUSB”“libusb-win32/libusb0”“libusbK”(均适用于 libusb 或 LibusbDotNet,“libusb-win32” 适用于同名库应用)。

点击 “安装驱动” 按钮(标签随操作变化)执行安装,也可通过按钮拆分部分选择其他操作(提取驱动、一次性安装 WCID 驱动等)。

部分 Windows 7 版本会显示安全警报:

界面示例:Windows 安全警报

 

此时应安装微软 KB2921916 补丁,或选择 “无论如何都要安装此驱动程序软件”。

安装过程通常几秒,若需禁用系统还原点可能耗时更长,完成后会通知。

界面示例:驱动安装成功界面

驱动以绿色显示(如 WinUSB),表明安装成功,可用于基于 libusb 的应用。

高级用法

高级用户可使用以下功能:

高级模式(选项→高级模式)

显示额外信息,可选择文件提取目录。

通过 INI 文件设置选项

所有菜单选项可通过 zadig.ini 设置,启动时读取。示例见下文。

信息 / 日志

高级模式下,通过 “选项→日志级别” 选择日志级别(用于了解安装过程或报告问题)。

自动创建 / 签名目录文件(选项→创建目录文件 / 选项→签名目录并安装自动生成的证书)

启用后,Zadig 自动生成目录(.cat)文件,用自签名证书签名,提取时安装到本机。

对列出的设备进行精细控制(选项→列出所有设备 / 选项→忽略集线器或复合设备父项)

默认只列未安装驱动的设备,可通过选项替换现有驱动(包括 USB 集线器、复合设备父项)。

创建新设备(设备→创建新设备)

为未插入但已知信息(VID、PID 等)的设备安装驱动,下次插入时可用。

打开预设(设备→加载预设设备)

类似 “创建新设备”,但使用 zadig 预设设备配置文件(示例见下文)。

zadig.ini 文件示例

# Zadig的示例ini文件

[general]

  # 在高级模式下启动应用程序(默认 = false)

  advanced_mode = true

  # 成功安装驱动程序后退出应用程序(默认 = false)

  exit_on_success = false

  # 日志级别(0=调试,1=信息,2=警告,3=错误)

  log_level = 0

  

[device]

  # 列出所有设备,包括已经安装驱动程序的设备(默认 = false)

  list_all = true

  # 列出所有设备时包括集线器和复合设备父项(默认 = false)

  include_hubs = true

  # 从USB设备描述中修剪尾随空格(默认 = false)

  trim_whitespaces = true

  

[driver]  

  # 选择以下作为默认安装的驱动程序:

  # WinUSB = 0,libusb0.sys = 1,libusbK.sys = 2,自定义 = 3(默认 = WinUSB)

  default_driver = 2

  # 仅提取驱动程序文件,不安装(默认 = false)

  extract_only = false

  # 提取驱动程序文件的默认目标目录(默认 = \"C:\\\\usb_driver\")

  default_dir = \"C:\\\\usb_driver\"

[security]

  # 如果嵌入,将以下证书安装到受信任的发布者存储中

  # install_cert = \"mycert.cer\"

  # 如果设置为true,将静默安装上面提供的证书(不推荐)

  # disable_cert_install_warning = false

zadig 预设设备配置文件示例

# 这是Zadig的示例预设设备配置

[device]

  Description = \"示例设备\"

  VID = 0xABCD

  PID = 0x1234

  MI = 0x01

# 你也可以如下强制设置特定的设备接口GUID

# GUID = \"{11111111-2222-3333-4444-555555555555}\"

防止替换 Zadig libusbK USB 设备驱动程序

问题

用 Zadig 替换为 libusbK 后,Windows 可能在重启或拔插设备后回滚驱动,Windows 更新也可能导致回滚或替换为较新驱动。

原因

Windows 持续确保设备安装 “最佳” 驱动,“最佳” 由驱动日期、版本等决定(称为 “排名”)。同排名时,最新日期的驱动优先。开机、重启或设备连接时,即插即用管理器扫描并分配最佳驱动,日期晚于 libusbK 的驱动可能导致回滚。

解决方法

通过 pnputil 删除日期较新的竞争驱动:

pnputil /delete-driver /uninstall

需确定 (通常是 oem####.inf):

设备管理器→[设备]→属性→事件:查看驱动事件,识别关联的 oem####.inf

若为当前驱动:设备管理器→[设备]→属性→详细信息→属性:Inf 名称

执行命令后,C:\\Windows\\INF 中的.inf 及 C:\\Windows\\System32\\DriverStore\\FileRepository\\ 中的驱动文件夹会被删除。

若需在 libusbK 和制造商驱动间切换,需手动管理(不理想)。注意:.inf 文件日期无法直接编辑(受.cat 文件签名绑定),删除.cat 文件可强制出现安装提示。

可能的预防措施

按文档阻止特定设备的 Windows 更新驱动安装(仅当制造商驱动被 Windows 更新挂钩时需此操作,未验证)。

过程和诊断详情

注册表检查:HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Enum\\USB\\,查找 VID_PID_条目,查看服务(WinUSB/libusbK)及 mfg 条目(对应 C:\\Windows\\INF\\ 的 oem###.inf)。

驱动存储检查:C:\\Windows\\System32\\DriverStore\\FileRepository\\ 中制造商设备对应的文件夹。

日志位置:C:\\Windows\\INF\\setupapi.dev.log,示例摘录如下:

>>>  [设备安装(硬件启动)- USB\\VID_2457&PID_104B\\7&13b69c22&0&3]

>>>  部分开始于2020/10/02 14:13:19.318

     utl: {选择驱动程序 - USB\\VID_2457&PID_104B\\7&13b69c22&0&3} 14:13:19.364

     utl:      驱动程序节点:

     utl:           状态         - 已选择

     utl:           驱动程序INF     - oem37.inf(C:\\WINDOWS\\System32\\DriverStore\\FileRepository\\ooi_flamenir.inf_amd64_c49d37bc221e3c4a\\ooi_flamenir.inf)

     utl:           类GUID     - {bad36dab-a3d2-4a0e-8b2e-da36202187d4}

     utl:           驱动程序版本 - 2016/04/11,1.2.0.0

     utl:           配置  - USB\\VID_2457&PID_104B

     utl:           驱动程序排名    - 00FF0001

     utl:           签名者分数   - WHQL (0D000005)

     utl:      驱动程序节点:

     utl:           状态         - 被超越

     utl:           驱动程序INF     - oem48.inf(C:\\WINDOWS\\System32\\DriverStore\\FileRepository\\ocean_optics_flame-nir128.inf_amd64_9d418d0d07e56955\\ocean_optics_flame-nir128.inf)

     utl:           类GUID     - {ecfb0cfd-74c4-4f52-bbf7-343461cd72ac}

     utl:           驱动程序版本 - 2014/11/30,3.0.7.0

     utl:           配置  - USB\\VID_2457&PID_104B [LUsbK_Device.NTamd64]

     utl:           驱动程序排名    - 00FF0001

     utl:           签名者分数   - Authenticode (0F000000)