3

署名されたドライバーがあり、C#(Vistaおよび7 64ビットを対象)を使用して特定のUSBデバイス用にプログラムでインストールする必要があります。

DIFx API内でDriverPackagePreinstall関数を非常に簡単に使用できることがわかりました P / Invokeの方法は次のとおりです)。デバイスをUSBに接続する前に呼び出すことで、Windowsはドライバーをデバイスに関連付けることができます。検出されました。

ドライバーをプリインストールせずにデバイスをUSBに接続すると、問題が発生します。そのデバイスに別のドライバーがインストールされている可能性があります(1つのテストPCで、汎用ドライバーがインストールされており、デバイスがデバイスマネージャーの[その他のデバイス]の下に表示されていることがわかりました)。

この問題を解決しようとすると、これまで、SetupDiGetClassDevsSetupDiEnumDeviceInfo、およびSetupDiGetDeviceRegistryProperty関数を使用してデバイスが存在することを検出し、VIDとPID(ベンダーと製品識別子)でデバイスを識別できました。デバイスのSP_DEVINFO_DATAができたので、 InstallSelectedDriver関数を呼び出す必要があると思いますね。はいの場合、その関数をP / Invokeする方法(pinvoke.netで見つかりません)と、デバイスにインストールするドライバーを指定して使用する方法(INFパスがある場合)を教えてください。 ?

4

1 に答える 1

4

ここで探していたもののサンプルを見つけました。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);
于 2011-12-20T08:26:21.240 に答える