以编程方式为USB设备安装“不兼容”驱动程序

时间:2017-02-27 22:48:47

标签: windows powershell batch-file winapi powershell-v2.0

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

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

打开设备管理器 - &gt; 右键单击所需设备以更新 - &gt; 更新驱动程序软件... - &gt; 浏览我的计算机以获取驱动程序软件 - &gt; 让我从驱动程序列表中选择在我的电脑上 - &gt; 取消选中”显示兼容的硬件“复选框 - &gt; 选择制造商和型号。< / p>

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

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

我也研究过PnPUtil,但这似乎不适合将特定驱动程序应用于特定设备。

也在仔细研究PowerShell的文档,并再次列出设备及其所有属性(包括驱动程序和驱动程序文件),但我还没有找到一种方法来强制地,以编程方式安装驱动程序<强烈的>我的选择。

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

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

如果您的设备不是即插即用的,并且在操作过程中可以将其插入计算机,您可以尝试使用DevCon并执行其InstallUpdate功能。