windows - 以编程方式为 USB 设备安装 "Incompatible"驱动程序

标签 windows powershell batch-file winapi powershell-2.0

我有一个在 Windows 7、8、8.1 和 10 机器上使用的 USB 设备。此设备(最终)在所有这些配置上都能被 Windows 更新识别,并为该设备安装了默认驱动程序。我想强制此设备使用我指定的驱动程序,即 不是 Windows 将选择的默认驱动程序。我想以编程方式执行此操作,最好使用 Windows 原生的组件(如批处理或 PowerShell),或者足够小以将它们包含在可部署的安装包中。

目标是找到一些编程方式来复制以下一组步骤调用的功能:

打开设备管理器 --> 右击想要更新的设备 --> " 更新驱动软件... " --> " 浏览我的电脑以获取驱动软件 " --> " 让我从我电脑上的驱动程序列表中挑选 " --> 取消选择“ 显示兼容硬件”复选框 --> 选择制造商和型号。

据我所知,这有效地绕过了设备先前或默认应用的 *.INF 文件中指定的默认硬件 ID。

我尝试使用 devcon.exe 执行此操作(同时尝试“安装”和“更新”功能),并且发现每次都失败,无论我如何一般指定设备的硬件 ID(不允许它影响其他设备,类(class))。我可以列出设备的驱动程序文件,但不能更改它们。

我还研究了 PnPUtil,但这似乎不适合应用 的应用程序。具体驱动程序到 具体设备。

也一直在研究 PowerShell 的文档,并且可以再次列出设备及其所有属性(包括它的驱动程序和驱动程序文件),但我还没有找到一种以编程方式强制安装驱动程序的方法 我的选择 .

关于如何实现上述目标的任何想法?提前非常感谢。

最佳答案

USB 主机 (Windows) 根据设备在询问时返回的描述符选择合适的驱动程序(在某些情况下,驱动程序是按接口(interface)加载的,在这种情况下,您需要读取接口(interface)描述符)。设备描述符可以包含以下信息:

bcdUSB
bDeviceClass
bDeviceSubClass
bDeviceProtocol
bMaxPacketSize0
idVendor
idProduct
bcdDevice
iManufacturer
iProduct
iSerialNumber
bNumConfigurations

通用(默认)类驱动程序通常基于 bDeviceClass、bDeviceSubclass 以及可能的其他一些细节来选择。如果设备供应商希望他们的驱动程序覆盖默认驱动程序,他们会为 idVendor 和 idProduct 实现一个 .inf 文件,并将其指向他们的驱动程序。如果您想覆盖默认驱动程序,您应该这样做。我想说,即使您想在代码中执行此操作,也需要生成该 inf 文件。 This是很好的信息来源,即使您自己没有实现驱动程序。

关于windows - 以编程方式为 USB 设备安装 "Incompatible"驱动程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42497223/

相关文章:

powershell - 从 Powershell 调用 VBScript ..这是正确的方法吗?

memory - Powershell:在运行空间 session 中创建文件

macos - 如何在 Mac 中创建批处理文件?

java - 无法从 Java 程序调用批处理文件

ruby-on-rails - RMagick 在 Windows 上安装 Redmine 时出错

asp.net - 在内容管理系统中处理图像和文件附件

powershell - 使用 Powershell 获取编号输出列表

python - 从 Windows + Apache 上运行的 Django 应用程序调用时,Popen 不执行

c++ - 通过 SendMessage 进行 IPC 时如何处理 32 位/64 位不匹配?

windows - 将字符串作为参数发送到批处理脚本中时,^ 会加倍