0

Windows WDF デバイス ドライバー コードがあり、(デバイスが存在する前に) プレインストールできるようにしようとしています。有効なデバイス ID が存在するかどうかを確認することから始め、見つかった場合は次のようにします。

if (UpdateDriverForPlugAndPlayDevices(0, // No Window Handle
    hwid, // Hardware ID
    inffile, // FileName
    INSTALLFLAG_FORCE,
    &RebootRequired))
        // success

ただし、デバイスが存在しないかプラグインされていない場合は、次のようになります。

if(SetupCopyOEMInf(inffile,
     NULL,
     SPOST_PATH,
     0,
     NULL,
     0,
     NULL,
     NULL))
        // etc.

最初のケース (デバイスが存在する) では、すべて問題ありません。しかし、2 番目のケースでは、Microsoft の「ドライバー パッケージのプレインストール」に従って、INF を c:\Windows\inf\oem.inf にコピーする必要があり (これは実行されます)、デバイスが存在する場合は、ドライバー ベースをインストールする必要があります。 INF の情報にはありませんが、デバイス マネージャーに移動し、不明なデバイスを削除し、ハードウェアの変更をスキャンしてインストールする必要があります。

最初のケース (デバイスが存在する) では、ドライバーの .sys ファイルは c:\windows\system32\drivers ディレクトリにコピーされますが、2 番目のケースではコピーされません。.sys ファイルを c:\windows\system32\drivers に個別にコピーすると、すべてが機能します。私はそれを行うことができますが、Microsoftの「ドライバーパッケージのプレインストール」ドキュメントを読んだことに基づいて、すべてが自動的に処理されることになっていることを考えると、それは面倒な(そして危険な)ようです。

4

1 に答える 1

0

ドライバーをプレインストールすると、そのドライバーのみがドライバー ストアに登録されます。次に、プリインストールされたドライバーに一致するデバイスが接続されると、SYS ファイルを C:\Windows\system32\drivers ディレクトリにコピーしてインストールし、INF ファイルを OEMxx.inf ファイルとして C:\Windows にインストールします。 \inf\ ディレクトリ。

そのコマンドを呼び出し、デバイスが存在する場合は、ご覧のとおり、Windows がドライバーをインストールします。デバイスが存在しない場合は、それに一致する次のデバイスが接続されたときにインストールされます。

デバイスマネージャーに手動で移動して「削除」および「再スキャン」してインストールをトリガーできると述べました。また、SetupCOpyOEMInf 呼び出しの後にプログラムで実行するコマンドを使用することもできます。devconのドキュメントを参照してください。ソースは WDK で入手できます。コマンド ラインでこれを試すことができますdevcon remove XXXX。XXXX はデバイスの一致する情報でありdevcon rescan、新しいハードウェアのスキャンをトリガーします。

また、SYS ファイルを自分でドライバ フォルダにコピーしないでください。提供されている方法を使用して、Microsoft が推奨するインストール方法を使用してください。これにより、後で頭を悩ませることがなくなります。

于 2014-09-02T15:45:20.673 に答える