問題タブ [setupapi]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
1374 参照

windows-xp - Windows XPカスタムUSBクラスドライバー、WHQL署名なしでプレインストールしますか?

USBデバイス用のWindowsドライバーを使用していますが、デバイスが私のドライバーを使用するように、インストールでMicrosoftの組み込みクラスドライバーをオーバーライドする必要があります。

ドライバーは自己署名されていますが、WHQL署名されていません。インストールはVistaまたはWin7で問題ありません。この場合、SetupAPIはドライバーを署名済みとして認識し、組み込みのクラスドライバーよりも優先ドライバーとして選択します。

ただし、これはWindowsXPSP3では機能しません。SetupAPIログは、ドライバーを検出したことを示していますが、信頼できないと見なしています。(ログの抜粋:「ドライバーノードが信頼されていません。ランクが0x00000001から0x0000c001に変更されました」)

ここスタックオーバーフローや他の場所での同様の質問に対する以前の回答は、WHQL署名がこれがXPで機能する唯一の方法であることを示唆しています。それは本当にそうですか、それとも既知の回避策はありますか?

回避策や問題の解決策に関する情報が記載されたリソースへのリンクはありますか?

この件についての助けに感謝します。

0 投票する
1 に答える
1800 参照

winapi - ドライバのインストール日を取得する方法?

Setup API を使用してドライバーのインストール日を取得するにはどうすればよいですか?


(これはこの質問とほぼ同じですが、 WMIではなくSetup API を使用したソリューションを探している点が異なります。)

必要なデータは、次のようなキーの値にあります。

ただし、Propertiesアクセス許可のためにデフォルトではキーにアクセスできませSetupDiGetDeviceRegistryProperty. デバイス マネージャーは、[詳細] タブでこれを非常に簡単に行います (取得するのと同じくらい簡単に見えますCM_DRP_INSTALL_STATE)。

0 投票する
1 に答える
867 参照

c# - C# でビデオ アダプターのハードウェア GUID を取得する

Windows で 3D ゲームのランチャー アプリケーションを開発しています。構成 "ini" ファイルでは、dxdiag.exe によって返されるデバイス識別子 GUID のように、目的のデバイスのハードウェア GUID を指定する必要があります。

システムで使用可能なアダプターを一覧表示しようとしています。ユーザーがアダプターを選択して、そのデバイスのハードウェア GUID を ini ファイルにロードできるようにします。

これを試みるための多くの方法を調べました。クラス GUID を返しますが、特定のドライバー GUID を返さない System.Management クラスを使用してみました。SetupAPI.h 関数へのネイティブ呼び出しを使用してみましたが、これも特定のデバイス識別子 GUID を一覧表示できないようです。GUIDが存在するかどうかを確認するために、レジストリを調べてみました。運がない。

私の最良のアイデアは、おそらくマネージ DirectX ライブラリを使用して、探している GUID を返すことでした。これはおそらく dxdiag の方法です。.NET アプリケーション用の SharpDX Managed DirectX インターフェイスを使用して、各ドライバーに関するハードウェア情報を列挙および収集できました (フレームワーク 3.5 をターゲットにしています) が、dxdiag が返すのと同じ GUID を返すことができませんでした。

私は本当に解決策に行き詰まっています。ヘルプ?

0 投票する
1 に答える
615 参照

windows - WPD とセットアップ API を使用して他のデバイスからデジタル カメラを識別する方法

私は2つのタスクを持っています:

a) IPortableDeviceManager::GetDeviceList によって取得された、デジタル カメラを他の MTP デバイスと区別する。

b) Setup API で接続されているデジタル カメラを検索したい。私の考えは、最初にすべての USB デバイスを取得することでした。

しかし、それをやった後、私はアイデアを使い果たしました。具体的には、特定の USB デバイスの USB インターフェイス記述子を取得する方法がわかりません。セットアップAPIでインターフェースと呼ばれるものではなく、USBインターフェースを意味します。

前もって感謝します。

0 投票する
1 に答える
1205 参照

windows-7 - SetupDiGetClassDevs が XP、VS2010 でビルドされたアプリ、Win7 でエラーを引き起こす

PINVOKE を使用して、私も書いている dll を呼び出す WPF アプリを作成しています。dll 内のエクスポートされた関数の 1 つで、SetupDiGetClassDevs が呼び出されます。この時点で、XP でアプリを実行するとエラーが表示されます。まず、次のようなダイアログ ボックスが表示されます。

「プロシージャ エントリ ポイント RegOpenKeyExW がダイナミック リンク ライブラリ KERNAL32.dll に見つかりませんでした。」

[OK] をクリックすると、未処理の例外ダイアログが表示されます。WPP アプリと dll の両方が Win7 マシン上の VS2010 でビルドされており、アプリは Win7 システムで正常に動作します。この問題は、XP でアプリを実行している場合にのみ発生します。dll で SetupDiGetClassDevs (およびその後の SetUpdi 関数呼び出し) を回避しても、何も問題はありません。PINVOKE メカニズムは正常に動作しているようです。

何がうまくいかないのですか?dll は UNICODE を有効にしてビルドされていないため、参照されている RegOpenKeyExW を見て少し混乱しています。

ありがとうトム

0 投票する
1 に答える
8652 参照

windows-installer - XP で WinUSB ドライバーのインストールが失敗する (Win7 では問題なく動作する)

Windows XP (x86、サービス パック 3) に WinUSB ドライバーをインストールできません。Microsoft WinUSB ガイドラインに従って、inf ファイル、署名済みの cat ファイル (Inf2cat を使用して作成)、および関連する WinUSB 共同インストーラーを使用して、署名済みのドライバー パッケージを作成しました。Windows7 ではすべて問題なく動作しますが、XP ではインストールに失敗します。

inf ファイルは次のとおりです。

XP での setupapi ログの失敗は次のようになります。

XPで何が問題なのかを突き止めようとして、私は髪をかきむしっています。エラー

「ファイル キューのスキャン時にカタログを検証できませんでした」および「署名されていないか、正しく署名されていないファイルです」

ドライバーパッケージは正しく署名されており、警告なしでWin7に正しくインストールされるため、私には意味がありません. どんな助けでも大歓迎です

ありがとうトム

0 投票する
1 に答える
3533 参照

c# - プログラムで特定のデバイス用の特定のドライバーをインストールする(およびプレインストールが失敗した場合)

署名されたドライバーがあり、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パスがある場合)を教えてください。 ?

0 投票する
1 に答える
2633 参照

winapi - SetupDiCallClassInstaller は、64 ビット マシンで 32 ビット用にコンパイルすると、ERROR_IN_WOW64 をスローします。

32 ビット用にコンパイルされている場合、64 ビット マシンで SetupDiCallClassInstaller を呼び出すと、false が返されます。

他のすべての関数呼び出しは 32 ビットで問題なく動作しますが、これだけで問題が発生します。

ここで私が間違っていることを誰かが知っているかどうか疑問に思っています。

0 投票する
2 に答える
3065 参照

winapi - SetupDiCallClassInstaller 関数が 64 ビット プログラムに制限されているのはなぜですか?

32 ビット モードでコンパイルされたプログラムから SetupDiCallClassInstaller を呼び出そうとすると、64 ビット Windows で失敗します。

どうやらこれは仕様のようですが、理由を知りたいです。

0 投票する
1 に答える
460 参照

c++ - セットアップ API から SATA HBA のリストを取得する

何が欠けているのかわかりませんが、私よりも知識のある人に尋ねる時が来ました。ここで見つけた HDC GUID を使用しています。C++コードでこれを開こうとしています:

この呼び出しは成功し、hDevices は有効な参照を保持します。ただし、 SetupDiEnumDeviceInterfaces() を呼び出すと、何も繰り返されません。

SetupDiEnumDeviceInterfaces() は、システム エラー コードを 249 に設定します。これは「アイテムがありません」ですが、何も繰り返されていません。どうやら、ハンドルは空のリストを指しています。SetupDiGetClassDevs() の呼び出しで間違っているのは何ですか? GUIDが「インターフェース」GUIDではない可能性があると思いました(つまり、「インターフェース」という言葉が名前に含まれていません)。そこで、DIGCF_DEVICEINTERFACE で bitwise-or を外してみましたが、これは役に立ちませんでした。

この API の使用方法に関する私の知識は非常に限られており、今は車輪を回転させる以外に何もしていません。

助けてくれてありがとう。