c#-以编程方式为特定设备安装特定驱动程序(并且在预安装失败时)
作者:互联网
我有一个签名的驱动程序,我需要使用C#以编程方式为特定的USB设备安装它(针对Vista和7 64位).
我发现在DIFx API中使用DriverPackagePreinstall函数非常容易(here是如何P /调用它):通过在将设备插入USB之前调用它,Windows可以将驱动程序与设备相关联检测到.
在没有预装驱动程序的情况下将设备插入USB时会出现问题.可能会为该设备安装另一个驱动程序(在一台测试PC中,我发现已安装通用驱动程序,并且该设备在“设备管理器”中的“其他设备”下列出).
尝试解决此问题,到目前为止,我已经能够通过使用SetupDiGetClassDevs、SetupDiEnumDeviceInfo和SetupDiGetDeviceRegistryProperty功能检测到该设备是否存在,以便通过其VID和PID(供应商和产品标识符)来标识该设备.现在我的设备已经有了SP_DEVINFO_DATA,我想我必须调用InstallSelectedDriver函数,不是吗?如果是,请告诉我如何P /调用该功能(我在pinvoke.net上找不到)以及如何通过指定要为设备安装的驱动程序来使用它(假设我有INF路径) ?
解决方法:
我找到了一个与我正要搜索的here完全相同的示例.InstallSelectedDriver的P /调用对我来说适用于:
[DllImport("newdev.dll", SetLastError = true, CharSet = CharSet.Auto)]
[return: MarshalAs(UnmanagedType.Bool)]
protected static extern bool InstallSelectedDriver(
IntPtr HwndParent,
IntPtr DeviceInfoSet,
string Reserved,
[MarshalAs(UnmanagedType.Bool)] bool Backup,
out UInt32 Reboot);
标签:device-driver,setupapi,c 来源: https://codeday.me/bug/20191202/2084738.html