問題タブ [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.
windows - 同じタイプのスマート カード リーダーを区別する
スマート カード リーダーを使用するアプリがあります。ユーザーは複数の同一のリーダーを持っている場合があり、 によって返されるシステム名は、SCardListReaders
番号サフィックスが異なります (たとえば、「OMNIKEY CardMan 5x21 0」と「OMNIKEY CardMan 5x21 1」)。ユーザーはアプリのリーダーを設定できます。作業中にユーザーがスマート カードを別のリーダーに挿入すると、アプリは反応しません。
問題は、Windows の再起動後にリーダーもシャッフルできるという報告があることです。以前名前に「0 」があったものは、「 1」を持つことができます。私はこれに影響を与えません。シャッフルが発生した後、ユーザーはアプリでリーダーを再度選択する必要があります。これを修正して、ユーザーが何もする必要がないようにしたいと考えています。
最初はSCardGetAttrib
andをいじっていましSCARD_ATTR_VENDOR_IFD_SERIAL_NO
たが、このパラメーターは世界中のすべてのリーダーに対して一意の文字列を返すわけではありません。たとえば、同じ特定のタイプのすべてのリーダーに対して「12345678」を返す場合があります。
私は今 SetupAPI function を見ていますSetupDiGetDeviceRegistryProperty
。すべての USB デバイスとパラメータを一覧表示できますが、それらはSPDRP_PHYSICAL_DEVICE_OBJECT_NAME
一意SPDRP_LOCATION_PATHS
のように見えます。システムで修正されることを願っています。リーダーが USB デバイスでない場合は、今のように名前だけに頼ります。問題は、リーダーの名前からどの USB デバイスを見ているかを推測できないことです。どのSPDRP_
パラメーターも読者名を与えてくれないので、に与えることができる名前が必要SCardConnect
です。
リーダー名からHDEVINFO
、私が与えることができる対応する名前を取得するにはどうすればよいSetupDiGetDeviceRegistryProperty
ですか? または、Windows の再起動後も信頼できる、同じタイプのスマート カード リーダーを区別する別の方法はありますか?
windows - インストールされているデバイス ドライバーを変更する
SetupAPI を使用して、デバイスにインストールされているドライバーを変更しようとしています。ドライバーは既に PC に存在していますが、現在選択されていません。
具体的には、USB 複合デバイス用のサードパーティ ドライバーのインストールを元に戻し、代わりに既定の Windows ドライバーをインストールしようとしています。
私はすでに次のようにほとんど機能しています:最初に、を使用してデバイスを見つけます
デバイスを見つける。
次に、インストールするデフォルトの USB 複合デバイス ドライバーを見つけます。
ドライバーを見つけたら、電話します
これにより、デバイス マネージャーで確認できるように、実際にはドライバーが元に戻ります。
ただし、サードパーティのドライバーはデバイスを独自のグループ/カテゴリに入れました。この変更は、私のアプローチを使用しても元に戻されません。
デバイス マネージャーで標準の USB 複合デバイス ドライバーを手動で選択すると、デバイス カテゴリがUSB コントローラーに復元されます。これが、ドライバーのインストール プロセスが不完全であると考えられる理由です。何が欠けている可能性がありますか?
c++ - エラー 87 の取得、SetupDiGetDeviceInterfaceDetail のパラメーターが正しくありません
SetupDiGetDeviceInterfaceDetail ( https://msdn.microsoft.com/en-us/library/ff551120.aspx ) の呼び出し中に Windows エラー 87 が引き続き発生し、すべてのオプション パラメータを NULL に切り替えてもエラーが発生し続けますが、機能する別の関数で最初の 2 つのパラメーターを使用しているため、それらの何が間違っているのかわかりません。
以前のすべての関数が true を返すため (たとえば、GUID が有効であるため)、どのパラメーターが正しくない可能性があるのか 本当にわかりません。
c# - 私の SetupDiEnumDeviceInfo は、特定のデバイスに対して ERROR_NO_MORE_ITEMS を返します (C#)
デバイス (cm_power_data_s) の電力データをフェッチしようとしています。そのためにAPIを
使用しています。これは一部のデバイスでは正常に機能しますが、他のデバイスでは機能しません。によって返されるデータはであり、これがないと を使用できません。 class を取得するためのクエリを作成して手動で入力しようとしましたが、バッファ サイズが返されません (null データを渡すのと同じです)。誰か助けてくれませんか?これが私のコードです:SetupDiGetDeviceRegistryProperty
SetupDiEnumDeviceInfo
null
SetupDiGetDeviceRegistryProperty
sp_devinfo_data
wmi
GUID
SetupDiGetDeviceRegistryProperty