0

ドキュメントによると、C++ 関数CM_Locate_DevNodeACM_Reenumerate_DevNodeofは、デバイス マネージャーで変更されたハードウェアCfgMgr32.dllのメニュー項目スキャンとプログラム的に同等である必要があります。

C# のマネージ コードについては、この質問に対する 2 番目の回答を参照してください。

しかし、ドキュメントとは対照的に、デバイス マネージャーの操作が機能する場合、プログラムによるアプローチは常に機能するとは限りません。これは私の場合です:

  1. ユーザーはすでに USB デバイスに接続されています

  2. ドライバーが見つかりません

  3. 私のインストーラーは、適切な INF ファイルを Windows/inf ディレクトリに追加します

  4. CM_Reenumerate_DevNode新しいドライバーのインストールは発生しません

  5. デバイスマネージャーの「ハードウェア変更のスキャン」は、新しいドライバーでインストールを開始します

4

2 に答える 2

0

C++ コードを記述して、デバイス マネージャーの [ハードウェアのスキャン] コマンドを複製しようとしたときに、同様の問題が発生しました。

https://support.microsoft.com/en-us/kb/259697のコードを使用してみました。

しかし、うまくいきませんでした。にあるCM_Reenumerate_DevNodereturnに気付きました。CR_ACCESS_DENIED#define CR_ACCESS_DENIED (0x00000033) // NT ONLYCfgmrg32.h

CM_Reenumerate_DevNode 関数によると、この関数の呼び出し元が必要SeLoadDriverPrivilegeです。

コードでこの権限を設定することを回避するために、.exe を右クリックし、[管理者として実行] を選択して、.exe を管理者として実行しました。

于 2015-09-22T18:53:30.670 に答える
0

inf ファイルを C:\windows\inf ディレクトリにコピーする代わりに (この質問SetupCopyOEMInfに対する受け入れられた回答の C# の例)を使用すると、再起動後にドライバーが認識されます。この方法は、「infファイルを右クリック->インストール」と同等のようです。

私の場合、製造元が登録していないため、「Windows はこのドライバー ソフトウェアの発行元を確認できません」というウィンドウが表示されました。しかし、これは別の話です。ただし、これは私の問題の別の原因である可能性があります。

于 2013-02-18T16:20:27.440 に答える