2

問題:

私は、同じタイプのネットワーク カードを多数搭載した PC と、それらにサービスを提供できる 2 つのドライバーを持っています。ロードするドライバーを Windows 7 に決定させると、それぞれのドライバーに製造元のドライバーがロードされ、4 枚中 3 枚のカードでは、それが望ましい動作です。ただし、最後のカードは他のカードとは異なるドライバーをロードする必要があります。

手動ソリューション:

この問題は、デバイス マネージャーに移動し、カードのエントリのコンテキスト メニューから [ドライバーの更新] を選択し、使用可能なすべてのドライバーを一覧表示してから、Windows が無視するドライバーを選択することで手動で解決できます (メーカーのドライバーは署名されており、私のドライバーは署名されていないため)。 't)。これをプログラム的に実行することが、私が追求する最終的な目標です。

試みたアプローチ:

これを解決するためにすでにかなりのことを試しましたが、私が抱えている問題を正確に解決することはまだできません。

最初のアイデアは、UPnP サービスを無効にするか、同様にドライバーを割り当てる Windows の努力を拒否することでしたが、他のカードに必要であり、特定の状況では、ドライバーをかなり定期的に再割り当てする必要がある可能性があるため、できません。 .

DevCon ツールを使用してみました。一見すると、私の目標を達成するための信じられないほど簡単な方法のように見えるためです。それは、デバイス マネージャー自体と同じくらい強力であると言われているコマンド ライン インターフェイスです。ドキュメントの内容から、実際に使用可能なメソッドが提供されており、徹底的に試しました。しかし、アクセスしたいカードを一意に識別することに問題があるようです。DevCon ツールを使用すると、次の形式のデバイス ID を取得できます。

PCI\VEN_XXXX&DEV_XXXX&SUBSYS_XXXXXXXX&REV_XX\X&XXXXXX&X&XXXX

残念ながら、これはあまり役に立ちません。2 番目の「\」記号までは、ID は 4 つのデバイスすべてで同じです。それらを使用して、DevCon が提供するコマンドを発行できます (互換性のあるハードウェア ID の一覧表示や検索など)。しかし、DevCon は 2 番目の '\' に続く ID の部分を評価しないようです。つまり、カードの 1 つを無効にすることはできません (どのカードがどのドライバーのカードであるかは実際にわかります)。変更したいので、その点では問題ありません)。

非常によく似たアプローチは、Windows の SetupDI Api を使用することでした。実際、これは DevCon ツールが使用する正確な API です (とにかく、それが彼らの言うことです)。また、問題のデバイスを見つけて特定することは比較的簡単ですが (管理された世界を離れる必要がなかった私のような C# 担当者にとっても)、デバイスの有効化と無効化以外に何もする方法を見つけることができないようです。カードを取り外す方法 (ドライバーとの関連付けを完全に解除する方法) があれば、おそらく回避策を構築できますが、その方法がわかりません。デバイスを無効にするのは良いことですが、ドライバーの関連付けが保持されるため、私にとっては役に立ちません。

私のアプローチを改善するのを手伝ってくれたり、試してみる別のルートを教えてくれるなら、そうしてください. あなたの答えが私の問題を解決しない場合でも、あなたの提案は私がまだ試していないアプローチを示唆しているかもしれません.

4

1 に答える 1