問題タブ [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 に答える
6976 参照

windows - UpdateDriverForPlugAndPlayDevicesエラーは、私がしていることを*していない*ことを示しています

私はドライバーをインストールする手段に取り組んでいます。これが機能しなければならない複数のプラットフォームがあるため、必要に応じてドライバーのインストール/更新/削除の作業を行うために、devconとdpinstの両方にシェルアウトしています。テスト中、devconへのシェルアウトに問題があります。分離するために、WinDDKのdevconソースを参照して使用して、更新時にdevconが行うことを実行する小さなアプリを作成しました。Setup API(実際にはNewdev.dllの一部)のUpdateDriverForPlugAndPlayDevices()で問題が発生しています。こちらをご覧ください。ソースコードはここにあります:

UpdateDriverForPlugAndPlayDevices()がfalseを返すと、プログラムは失敗します。これにより、GetLastError()によって返されたエラーコードが出力されるため、何が問題だったのかがわかります。返されたエラーコード:259。このリソースによると、これはERROR_NO_MORE_ITEMSであるとのことです。UpdateDriverForPlugAndPlayDevices()のリンクによると、この関数は、「関数がHardwareId値と一致するものを検出したが、指定されたドライバーが現在のドライバーよりも一致せ、呼び出し元がINSTALLFLAG_FORCEフラグを指定しなかった場合に、このエラーコードを返します。 。」私のコードから、このフラグを指定したことがわかります。

ここからどこへ行けばいいのかわからない。誰かがこのコードから私が欠けているものを特定できますか?これは単純なものの「感触」を持っているだけですが、私はそれを完全に見逃しています。

ありがとう、アンディ

0 投票する
0 に答える
967 参照

windows - モデムをアンインストールする SetupDiCallClassInstaller の同等の API

モデムをアンインストールするためにパラメータとして使用SetupDiCallClassInstallerしました。DIF_REMOVEしかし、「Windows 7」「64ビット」マシンでアプリケーションをテストすると、エラーが発生0xE0000235しましたが、これを解決する解決策が見つかりませんでした。

これについて話しているSOリンクの一部には、64ビットexeを作成するのではなく、解決策がありません。

ここでの私の質問は、同じことを行う他の API (モデムをアンインストールしたい) はありますか?

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

python-2.7 - Python から SetupDiGetClassDevs を呼び出すと、整数値のみが返されます

かなり単純な USB デバイス用の単純な読み取り/書き込みアプリケーションを作成しようとしていますが、それほど単純ではないことがわかりました。

私は WinUSB および SetupAPI DLL を使用しており、必要なものに対して実際に機能するものを見つけることができないため、ゼロから作業しています。PyWinUSB や PyUSB などは近かったのですが、実際にそれらを使ってデバイスに書き込もうとすると失敗しました。

とにかく、今私はまだほぼゼロにいます。指示に従って、SetupAPI.dll から SetupDiGetClassDevsExW 関数を呼び出しています。0 を返す kernel32.lasterror 関数の呼び出しによって示されるように、関数は正しく実行されますが、呼び出しから返されるのは整数値だけです。あれは正しいですか?これは正しい機能ですか?(類似したものは 4 つあり、単純な SetupDiGetClassDevs 関数だけではありません。4 つの関数とは、SetupGetClassDevsExW、SetupGetCLassDevsExA、SetupGetClassDevsA、および SetupGetClassDevsW です。)これを使用するクラスを作成する必要がありますか? 次の関数である SetupDiEnumDeviceInterfaces を呼び出しても、コード 259 で失敗するだけでした。これは、簡単な Google 検索によると ERROR_NO_MORE_ITEMS を意味します。

誰かが情報を保持するための構造を作成するための正しいクラス構造メソッドを示してくれたという点で、私はある程度の進歩を遂げましたが、Python は言うまでもなく、USB デバイスのプログラミングを実際に行ったことがないので、私はまだちょっと立ち往生しています。回答に必要な情報はこれ以上提供しますが、現時点では、この Q/A を不必要な情報で行き詰らせたくありません。

ありがとう。

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

python-2.7 - 関数 SetupAPI.DLL.SetupDiEnumDeviceInterfaces() に最後の値として何を渡しますか?

私はPythonで作業しており、かなり単純なUSBデバイスとの間で読み書きする単純なプログラムを作成しようとしています. 私が抱えている問題は、PyWinUSB と PyUSB には必要なものがないように見えるため (デバイスに書き込もうとすると爆発する)、ctypes python モジュールと生の dll 関数を使用してゼロから作業する必要があることです。 WinUSB と SetupAPI。

関数に渡す構造体を定義する方法についての質問には答えることができましたが、現在の問題は、関数の仕様によると...まあ、私は'そのまま引用します。

これらの要件を Python に変換するにはどうすればよいですか?

私が現在取り組んでいる構造クラスは次のようになります。

以前の質問への回答で知らされたことによると。

ありがとう。

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

wpf - SetupDiGetClassDevs が XP でエラーを引き起こす

別の WPF アプリケーションによって呼び出される Win32 アプリケーションがあります。Win32 トレイ アプリケーションで、USB デバイス通知を登録しています。ここでは、SetupDiGetClassDevs への API 呼び出しを使用して、接続されているデバイスを検索できるようにします。

XP では、WIN32 アプリケーションが次のエラーでクラッシュします。

win7 と win8 では、API 呼び出しは正しく機能します。アプリケーションは、Win7 VS2010 上に構築されています。

XP sp3 での SetupDIGetClassDevs の呼び出しに問題はありますか?

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

windows - SCSI ドライブを一覧表示するための SetupDiGetClassDevs がエラー コード 13 (ERROR_INVALID_DATA) で失敗する

解決策が見つからない、かなり興味深い問題があります。Setup API を使用して、システム内のドライブを一覧表示しています。列挙子を「IDE」に設定する場合、以下にリストされているコードを使用しても問題はありません。列挙子の値が「SCSI」に設定されていると、私の不安が生じます。この問題を再現するコードは次のとおりです。

ご覧のとおり、このコードには特筆すべき点はありません。問題は、特定のラップトップでは、このコードが SetupDiGetClassDevs() でエラーになることです。GetLastError() を確認すると、ERROR_INVALID_DATA (0xd) で失敗したことがわかります。私が理解していないのは、その理由です。これとまったく同じプログラムを、自分のユーザー (管理者権限を持つ) と非特権ユーザーの両方として開発ボックスで実行すると、SCSI ドライブが存在するかどうかに関係なく正常に動作します。

使用中の GUID が正しいことはわかっています。これは devguid.h で定義されています。「SCSI」は有効な PnP 列挙子であり、このMSDN ページで参照されているほか、デバイス マネージャーの「列挙子」プロパティを調べることからも参照できます。3 番目の引数は NULL の場合があり、4 番目の引数はこの関数に対して有効な定義済みフラグです。私がこれを知っているのは、これらのラップトップを除いて、これまでに試したすべてのシステムで動作するからです (私の組織ではかなりの数です)。ここの誰かが、これらの条件でこのエラーで SetupDiGetClassDevs() が失敗する原因を知っているか、少なくとも正しい方向に向けてくれることを願っています。私は Windows の専門家ではないので、システム構成またはアクセス許可に何か不足している可能性があります (ただし、エラーから暗示されているわけではありません)。

明らかなように、管理者権限を持つユーザーと管理者ユーザーの両方としてテストできる 1 台のラップトップでこのコードを実行しましたが、どちらも同じ結果になりました。このラップトップは、Windows 7 64 ビット Service Pack 1 を実行する HP EliteBook 8460p です。このコードを 32 ビットまたは 64 ビットでコンパイルしても違いはありません。

0 投票する
0 に答える
299 参照

c# - SetupAPI C# からの「SetupScanFileQueue」コールバックの問題

GUID に基づいてデバイスを列挙する SetupAPI ラッパーを C# で実装しました。私は多かれ少なかれ、MSDN にある DevCon の c++ サンプル コードを C# に変換しました (はい、.NET でこれを行うのは非常に困難であることは十分承知していますが、楽しくてやりがいがあります)。

特定のデバイスに関するすべての適切な情報を取得できますが、「SetupScanFileQueue」メソッドに到達したときに問題が発生しました。

「SetupScanFileQueue」を作成してコールバックを呼び出すことができないようです。メソッドは true を返すので、機能しているようです。

私の最終目標は、特定のデバイスのドライバー ファイルを取得することです。

追加情報: ファイルは FileQueue に正しく追加されているように見えます。正しいファイルをコピーしているように見えるこのポップアップ ウィンドウが表示されます。

私の Callback の定義は次のとおりです。

「SetupScanFileQueue」関数で私が間違っていること、およびコールバックが呼び出されない理由について何か提案はありますか?

どんな助けでも大歓迎です!

編集:

SetupScanFileQueue 関数の DllImport も追加する必要がありました。

CallingConvention なしでも試してみました。

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

c# - SetupApi を使用して、デバイスに読み込まれているドライバーを確認する

Setup API で何日も苦労してきましたが、まだ 1 つ気になることがあります。デバイスのリストをロードできます。これらのデバイス ハンドルを使用して、ドライバーストアから適切なドライバーのリストを取得できますが、どうすればよいでしょうか。それらのどれが現在ロードされているかを判断しますか? デバイスの説明がドライバーの説明と一致すると言うのは実際には簡単ですか? または、そのための API 呼び出しはありますか? ドライバー情報を表すはずのデバイスから GUID を読み取ることができるのに、上記の列挙から取得したドライバー情報にそのような GUID がないのはなぜですか?

どんな助けでも大歓迎です、ありがとう!

0 投票する
0 に答える
192 参照

windows - Windows XP での USB デバイスの場所

SetupDiGetDeviceRegistryProperty 関数と SPDRP_LOCATION_INFORMATION プロパティを使用して、親ハブに基づいて USB デバイスをグループ化しようとしています。

Windows 7 では問題なく動作しています。得られる文字列は "PORT_XXXX&HUB_XXXX" です。しかし、Windows XP で同じことをしようとすると、代わりにデバイス名が取得されます。

誰が何が起こっているのか知っていますか?Windows XP のバグですか?

ありがとう。

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

cmd - 再起動を引き起こす .inf を介したプログラムによるドライバーのインストール

次のコマンドを使用して、inf ファイル経由でドライバーをインストールしようとしています。

MSDN ( http://msdn.microsoft.com/en-us/library/aa376957%28v=vs.85%29.aspx ) によると、「インストールの既定のパスを設定する」とは別に、パラメーターとして 128 を指定することにより、これは一般的な設定です」というメッセージが表示された場合、インストールは (+0) ユーザーに再起動を要求しません。ただし、私の場合は常にそうです。

私は何を間違っていますか?