3

Windows セットアップのインストール中に、サードパーティの libusb ドライバーをインストールしたいと考えています。このインストールは、Visual Studio 2010 で作成しました。

SetupAPI と DifXAPI を使用してコマンド ラインからこのドライバーをインストールしようとしましたが、何も起こりません。署名されていないドライバーであることを示すウィンドウがポップアップするはずです。続行するには [OK] をクリックする必要があります。このウィンドウをポップアップさせる唯一の方法は、C# コンソール アプリケーションとP/Invokeを使用して、DifXApi (inf-wizard によって生成されたように見える INF ファイルを指す) からドライバー インストール コードを呼び出すことです。プロジェクトを x64 用にビルドする必要がありました (これは 32 ビット インストーラーでも機能する必要があります)。[OK] をクリックしても、ドライバーはインストールされませんでした。

このドライバーが正しくインストールされる唯一の方法は、USB 経由でハードウェアを接続し、不明なデバイスを右クリックして、ドライバー DLL ファイル、sys ファイル、および INF ファイルを含むフォルダーを参照することです。Windows はドライバーのインストール方法をどのように判断しますか?

INF ファイルには 32 ビット/64 ビット/Itanium 用のドライバー セクションがありますが、Windows はどのセクションをインストールするかをどのように認識しているのでしょうか。

4

1 に答える 1

2

次のコードを使用して、32 ビットおよび 64 ビットの Windows にドライバーをインストールできinfPathますdevices

[DllImport("setupapi.dll")]
public static extern bool SetupCopyOEMInf(
    string SourceInfFileName,
    string OEMSourceMediaLocation,
    int OEMSourceMediaType,
    int CopyStyle,
    string DestinationInfFileName,
    int DestinationInfFileNameSize,
    int RequiredSize,
    string DestinationInfFileNameComponent
    );

[DllImport("newdev.dll")]
public static extern bool UpdateDriverForPlugAndPlayDevices(
    IntPtr hwndParent,
    string HardwareId,
    string FullInfPath,
    uint InstallFlags,
    bool bRebootRequired
    );

[STAThread]
static void Main() {
  if (SetupCopyOEMInf(infPath, null, 0, 0, null, 0, 0, null)) {
    foreach (string device in devices) {
      UpdateDriverForPlugAndPlayDevices(IntPtr.Zero, device, infPath, 0, false);
    }
  }
}
于 2012-08-01T00:43:57.093 に答える