我有一个已签名的驱动程序,我需要使用C#以编程方式为特定的USB设备安装它(针对Vista和7 64位)。
我发现在DIFx API中使用DriverPackagePreinstall函数非常容易(here是如何P / Invoke它):通过在设备插入USB之前调用它,Windows是能够在检测到驱动程序后将驱动程序与设备关联。
在未预先安装驱动程序的情况下将设备插入USB时会出现问题。可能会发生为该设备安装另一个驱动程序(在一台测试PC中,我发现已安装了通用驱动程序,并且该设备列在“设备管理器”中的“其他设备”下)。
尝试解决此问题,到目前为止,我已经能够使用SetupDiGetClassDevs,SetupDiEnumDeviceInfo和SetupDiGetDeviceRegistryProperty函数检测设备是否在那里通过其VID和PID(供应商和产品标识符)识别设备。现在我的设备有SP_DEVINFO_DATA,我想我要调用InstallSelectedDriver函数,不是吗?如果是的话,你能告诉我如何P / Invoke该功能(我在pinvoke.net上找不到它)以及如何通过指定我想为我的设备安装的驱动程序来使用它(假设我有INF路径) ?
答案 0 :(得分:3)
我找到了一个我正在搜索here的样本。 InstallSelectedDriver的P / Invoke适用于我:
[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);