問題タブ [inf]
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.
c# - C# で INF ファイルを使用して libusb ドライバーをインストールします。
Windows セットアップのインストール中に、サードパーティの libusb ドライバーをインストールしたいと考えています。このインストールは、Visual Studio 2010 で作成しました。
SetupAPI と DifXAPI を使用してコマンド ラインからこのドライバーをインストールしようとしましたが、何も起こりません。署名されていないドライバーであることを示すウィンドウがポップアップするはずです。続行するには [OK] をクリックする必要があります。このウィンドウをポップアップさせる唯一の方法は、C# コンソール アプリケーションとP/Invokeを使用して、DifXApi (inf-wizard によって生成されたように見える INF ファイルを指す) からドライバー インストール コードを呼び出すことです。プロジェクトを x64 用にビルドする必要がありました (これは 32 ビット インストーラーでも機能する必要があります)。[OK] をクリックしても、ドライバーはインストールされませんでした。
このドライバーが正しくインストールされる唯一の方法は、USB 経由でハードウェアを接続し、不明なデバイスを右クリックして、ドライバー DLL ファイル、sys ファイル、および INF ファイルを含むフォルダーを参照することです。Windows はドライバーのインストール方法をどのように判断しますか?
INF ファイルには 32 ビット/64 ビット/Itanium 用のドライバー セクションがありますが、Windows はどのセクションをインストールするかをどのように認識しているのでしょうか。
winapi - UpdateNow が設定されていませんか? (言語モニターの問題)
WIN32 API の AddMonitor() を使用せずに (つまり、レジストリを編集するか INF ファイルを使用して) プリンター言語モニターをセットアップする方法を見つけようとしていますが、何度も問題が発生し、良い結果が得られません。この目的のための INF ファイルの例。
テスト目的で、ntprint.inf を編集して、PJL_LANGUAGE_MONITOR が pjlmon.dll ではなく DLL を指すようにし、適切なレジストリ キーも同じように変更しました。印刷スプーラーをリロードしようとするたびに、デバッグ出力に基づいて言語モニターが正常にロードされているように見えますが、印刷すると、「UpdateNow not set」というデバッグ メッセージが表示され、エディターの PID が表示され続けます。使っています。
私の質問は、この「UpdateNow が設定されていません」というメッセージは問題に関連していると思いますか、それとも単に取るに足らない症状でしょうか?
installation - DevCon は、再スキャン後にドライバーのインストールが完了したときに通知できますか?
Windows セットアップ プロジェクト中にドライバーをインストールしようとしています。
最初に、INF ファイルをコピーしてドライバーをプレインストールします。
SetupCopyOEMInf(infFile, null, 1, 0, null, 0, 0, null);
これにより、ドライバーが正しくプレインストールされますが、デバイス マネージャーでハードウェアの再スキャンが行われるまで、デバイスを使用する準備ができていません。これも自動化したい。setupapi.dll を使用してハードウェアの再スキャンを実行しようとしましたが、常に成功するとは限りませんでした。devcon.exe rescan を使用すると、常にハードウェアの再スキャンが強制されますが、これは同期コマンドであり、デバイスのインストールが完了する前に戻ります。ハードウェア スキャンが完了し、ドライバーが正常にインストールされた後に結果を取得する方法はありますか?
ありがとう、
ミーシャ
編集
ここに私の作業コードがあります:
windows - ネットワーク接続名を変更するカスタム Windows USB / RNDIS .inf ファイル
g_ether
Linux のドライバーを使用して、Ethernet over USB 経由で Windows 7 と通信する組み込み Linux デバイスがあります。デバイスが「ローカル エリア接続 2」以外のものとして Windows ネットワーク接続ダイアログ ボックスに表示されるようにするためにlinux.inf
、カーネル ソースのサンプル ファイルを変更しようとしています。src/Documentation/usb/
「ローカル エリア接続 2」のメイン タイトルの下にサブストリングとして表示されるカスタム文字列を指定するよう[strings]
に、ファイルの一部を変更しただけです。linux.inf
たとえば、「Local Area Connection 2」ではなく「Phils Device」とデバイスに表示させる方法がわかりません。誰かがこれを行う方法を教えてくれれば幸いです! ありがとう -
変更した .inf ファイルの例の一部:
参考文献:
http://msdn.microsoft.com/en-us/library/ff570620.aspx
http://msdn.microsoft.com/en-us/windows/hardware/gg463293.aspx
driver - ドライバーをインストールして実行する方法
デバッグに「HelloWorld」のみを出力する単純なドライバーを作成しました。空のドライバープロジェクトを作成するために、Visual Studio 2012RCとWDK8を使用して、次のコードを記述しました。
私はそれをwin7x64にコンパイルしました。このドライバーをインストールして実行するには、.infファイルを作成する必要があることを読みましたが、それを管理できないようです。WDK 8からサンプルの.infファイルを取得し、.sysファイルと一致するように変更しましたが、仮想ボックスwin7x64が台無しになりました:-)。そこで、VS2012でフィルタードライバープロジェクトを作成し、.infファイルを取得して.sysファイルと一致するように変更しましたが、インストールしても何も起こりませんでした。作成した新しいサービスを実行してみました
しかし、デバッグには何も出力されず、[コンピューター]->[管理]->[サービス]にMyDriverが表示されません。DebugViewを使用して、デバッグに出力される内容を確認しています(http://technet.microsoft.com/en-us/sysinternals/bb896647.aspx)。
もちろん、時間の経過とともに、実際に何かを実行するドライバーを作成したいと思いますが、その間、それを実行する方法を知りたいだけです。
VS2012から取得して変更した.infファイルは次のとおりです。
wdreg.exeを使用してドライバをインストールして実行しようとすると、「INFファイルの製造元セクションが見つかりませんでした」と表示されました。(http://www.jungo.com/st/support/documentation/windriver/10.3.0/wdpci_manual.mhtml/dyn_windows.htmlから).infファイルについてたくさん読んだ(いくつかのマイクロソフトブックとたくさんのグーグルから) )そして私はまだ私の.infファイルを修正する方法を知りません。
私のドライバーを実行するためのより簡単な方法があれば、私はそれについて聞いてみたいです。実行方法がわかれば、実際の製品のデバッグは簡単になります。
ありがとう!
編集:テストモード(http://www.ngohq.com/home.php?page=dseo)でDriver SignatureEnforcementOverriderを使用して.sysファイルも歌います。
windows - 署名されたINFドライバーは、署名されたコンピューターで動作し、他のコンピューターでは動作しません
私の会社はGoDaddyからドライバー署名証明書を購入しました。これを使用して、Microsoftのusbser.sysを使用する一部のUSBデバイスのドライバーである単純なINFファイルに署名しました。署名したWindows764ビットコンピューターではすべてが機能しているようです。INFファイルを右クリックして[インストール]を選択すると、2番目に表示される警告は、正しい発行元名を示すこの適切な警告です。
ただし、別のコンピューター(Windows Vista 64ビット)に移動し、INFファイルを右クリックして[インストール]を選択すると、代わりに次のエラーメッセージが表示されます。
これにより、ドライバーが適切に署名されていないと思います。コンピューターで見栄えがする唯一の理由は、GoDaddyのインストールプロセス中にインストールしたルート/中間/クロス証明書が原因です。コンピューターに証明書を手動でインストールしなくても、ユーザーが私たちが確認済みの発行元であることを確認できるようにしたいと思います。
同じディレクトリにあるINFファイルと.catファイル。
なぜこれが起こっているのか、どうすれば修正できるのか誰かが知っていますか?
主な問題は、実行時にこのエラーが発生することであると思われますsigntool verify /v pololu.cat
(詳細は以下を参照)。理由はわかりません。
SignToolエラー:証明書チェーンは処理されましたが、信頼プロバイダーによって信頼されていないルート証明書で終了しました。
私の手順の詳細
Driver Signing Certificateは、数週間前に発売されたGoDaddyの新製品です。コード署名証明書との違いはよくわかりませんが、同じ価格です。Go DaddyのWebサイトの指示に従って証明書をダウンロードしてインストールしましたが、指示は実際には完全には一致していません。手順1でMicrosoftCrossCertificateをインストールした後、次のような赤い警告メッセージが表示されました。
証明書をインストールする前に、Windows Updateを使用してルート証明書を更新するか、リポジトリからルート証明書を手動でダウンロードしてインストールする必要があります。
どうしたらいいのかわからない。リポジトリからいくつかのGoDaddyルート証明書をインストールしましたが、目立った違いはありませんでした。
最新バージョン(8.0)のWindows Driver Kit(WDK)をインストールしてから、最新バージョン(8.0)のWindows Software Development Kit(SDK)forWindows8をインストールしました。これにより、inf2cat
およびsigntool
ユーティリティにアクセスできます。どちらのキットも先月リリースされたので、私たちが踏み込んでいるいくつかの新しいバグがある可能性があります。
新しいディレクトリに、次の3つのファイルを配置します。
pololu_usb_to_serial.inf
、署名したいINFファイル。長いですがシンプルです。ここで読むことができます。このINFファイルはスタンドアロンドライバーです。ドライバパッケージに他のファイルは必要ありません。このファイルは、基本的に当社が何年にもわたって正常に配布(署名なし)したバージョンと同じですが、Inf2Catがそれを受け入れるためにいくつかの変更を加える必要がありました。mscvr-cross-gdroot-g2.crt
、GoDaddy証明書リポジトリからダウンロードしました。これは、「Go Daddyルート認証局-G2」がMicrosoftによって信頼されていることを証明する相互証明書だと思いますが、これが使用するのに適切な証明書であるかどうかは完全にはわかりません。sign_it.bat
、署名を行うために実行するバッチファイル。
バッチファイルには次のものが含まれています。
最初のコマンドは、WindowsDriverKitから呼び出しますinf2cat
。/v
オプションはそれを冗長にします。この/driver:%~dp0
オプションは、バッチファイルを含むディレクトリを指します。a.
は何らかの理由で機能せず、これはフルパスをハードコーディングするよりも優れています。この/os
オプションは、このドライバーパッケージでサポートしたいすべてのオペレーティングシステムを指定します。このコマンドはを作成しますpololu.cat
。
signtool
2番目のコマンドは、Windows Software Development Kitから呼び出して、カタログファイルに署名します。/v
オプションはそれを冗長にします。この/ac
オプションは、どの相互証明書を使用するかを指定します(上記の#2を参照)。この/n
オプションは、使用する証明書の名前を指定します(その証明書は、に従ってコンピューターにインストールされますcertmgr.msc
)。この/t
オプションは、GoDaddyのタイムスタンプサーバーのURLを指定します。
バッチファイルを実行したときのコマンドプロンプトの出力は次のとおりです。
私が言ったように、私は.catファイルと.infファイルを同じディレクトリに一緒に保持していますが、それらに署名した場合、それらはコンピュータ上でのみ正しく機能します。
Signtoolによる検証
Microsoftのsigntool
ユーティリティには、署名が正しいかどうかを確認できる「確認」機能もあります。検証時に使用できる3つの異なるポリシーがあり、それぞれが異なる結果をもたらします。
- Windowsドライバー検証ポリシーでは、署名チェーンはMicrosoftにさかのぼることはなく、ルートが信頼されていないことに関するエラーメッセージが出力されます。それは私には問題のようです。
- デフォルトの認証コード検証ポリシー(
/pa
)には、署名チェーンはMicrosoftにさかのぼらないと書かれていますが、エラーは発生しません。 - カーネルモードドライバー署名ポリシー(カーネルモードドライバーに署名し
/kp
ていないため、おそらく適用されません)は、署名チェーンがMicrosoftにトレースバックし、エラーが発生しないことを示しています。
WindowsがINFファイルに使用するポリシーを知っている人はいますか?それは少なくとも私が問題を絞り込むのに役立ちます。
これは、以下からの完全で詳細な出力ですsigntool verify
。
ドライバーに署名したコンピューター(動作している場所)と他のコンピューター(動作していない場所)で実行した場合、出力は同じように見えました。
StackOverflowに関する同様の質問
64ビットWindows用のThawteドライバー署名-この男の問題の解決策は、CatalogFileディレクティブをINFファイルに追加することでしたが、私はすでにそれを持っています。(CatalogFile=pololu.cat
)。
編集#1:実行可能ファイルへの署名は機能します
実行可能ファイル(NSISインストーラー)に署名するために同じオプションでsigntoolを使用しましたが、両方のコンピューターで最初の試行で正しく機能しました。ですから、INFドライバファイルの署名ポリシーには何か違いがあると思います。それが私を困惑させているのです。
編集#2:GoDaddyの証明書に関する警告
をダブルクリックするmscvr-cross-gdroot-g2.crt
と、[全般]タブに「Windowsにはこの証明書を確認するための十分な情報がありません」と表示されます。[証明書のパス]タブの[証明書のステータス:]に、「この証明書の発行者が見つかりませんでした」と表示されます。gd_ms_drv_sign_bundle.p7b
(GoDaddyの証明書バンドル)をダブルクリックして最初の証明書を開くと、同じ警告が表示されます。
これらの証明書の両方の発行者は、Microsoftコード検証ルートであると想定されています。その警告メッセージについて心配する必要がありますか?
編集#3:GoDaddyの証明書の削除
GoDaddyの高度なサポートチームのLindsayが私に戻ってきました。彼女はglobalsignからこのページにリンクし、ドライバーに署名するコンピューター上のCAからルート証明書と中間証明書をアンインストールする方法を説明しています。Lindsayによると、この手順を実行しない場合、署名ツールはそれらの証明書が他のコンピューターに存在すると想定するため、署名に含まれません。
どの証明書が署名に「インポート」されているかを確認する方法を知っている人はいますか?LindsayとGlobalSignが正しいかどうかを確認するためにどのツールを使用できますか?
ちなみに、Windows XPコンピュータはありますが、MicrosoftはまもなくそのOSのサポートを停止します。GlobalSignが言っていることにもかかわらず、これをWindows7で機能させる方法が必要です。
Lindsayのアドバイスに基づいて、Microsoftの指示に従って、自動ルート認証局の更新をオフにし、のUIを使用して、certmgr.msc
「信頼されたルート証明機関」と「中間証明機関」からすべてのGoDaddy証明書を削除しました。次に、infファイルに再署名しました。
残念ながら、それはうまくいきませんでした!署名後、すべてのGoDaddy証明書がまだ削除されていることを再確認しました。
signtool verify
の出力、または検証を行うときに確認する必要のあるドライバー署名ポリシーに関する入力について、GoDaddyからフィードバックを受け取っていません。私は、彼らが検証出力を見て、私が間違っていることを教えてくれるか、正しい出力がどのようになるかを教えてくれることを望んでいました。
完全を期すために、signtool verify
これらの証明書を削除してドライバーに再署名した後の3つの出力を次に示します。
編集#4:DefaultInstallセクションはノーノーです
MicrosoftのDefaultInstallセクションのドキュメントで、私はこれを発見しました。
注ドライバーパッケージをデジタル署名する場合は、ドライバー パッケージのINFファイルに INFDefaultInstallセクションを含めないでください。
なぜそれが本当なのか誰かが知っていますか?説明が見つかりませんでした。
とにかく、INFファイルのDefaultInstallセクションを取り出したので、これからは、SetupCopyOemInfを呼び出す小さなDLLを実行してテストする必要があります。
まだ運がない。WindowsVistaコンピューターで未確認の発行元の警告が表示され続けます。
編集#5:JLinkドライバーは正しく署名されています
私はC:\ Windows \ System32 \ DriverStore \ FileRepositoryをざっと見て、適切に署名されたドライバーパッケージを見つけようとしていました。私が最初に見つけた興味深いものは、JLinkCDC.cat/JLinkCDC.infです。InfファイルのバージョンはですDriverVer=01/25/2012,6.0.2600.4
。Windows Vistaマシンで、(DLLを使用して)infファイルでSetupCopyOemInfを呼び出すと、発行元が誰であるか(Segger GMBHなど)を通知する適切なメッセージが表示されます。したがって、私のようなドライバーパッケージに適切に署名することは可能ですが、どういうわけかGoDaddyまたは私は何か間違ったことをしています。
JLinkCDC.infドライバーは、1つのファイルであり、usbser.sysを使用するため、私のドライバーと非常によく似ています。署名の信頼チェーンは、VeriSign Class 3 Public Primary CertificateAuthority-G5に戻ります。
基本的に、このJLinkCDCドライバーは私のものと似ており、動作するので、違いが何であるかを注意深く調べる予定です。
JLinkCDC.catのsigntoolverifyの出力は、GoDaddyではなくVerisignにトレースバックすることを除いて、私のものと非常によく似ています。
編集#6:マイナーな変更
ドライバーをJLinkCDC.infに近づけるDriverPackageType=PlugAndPlay
ために、INFファイルに追加し、ファイル名を短くしました。ファイルの名前はpolser.catおよびpolser.infになりました。まだ運がない!
編集#7:いくつかの成功!
私は次のことが真実だと思います。私が間違っている場合は私を訂正してください:
- ドライバーパッケージ(.catファイル)の場合、の正しいオプションは
signtool verify
です/pa
。これはKMCS_Walkthrough.docから推測します。 - ドライバーパッケージの場合、Windowsは、信頼の鎖がcertmgr.mscの[信頼されたルート証明機関]フォルダー内の証明書に戻った場合にのみ、発行元が検証されたと見なします。
- ドライバーパッケージの場合、相互証明書を使用して署名できます(gdroot-g2.crtからMicrosoftコード検証ルートへの信頼の鎖を拡張します)が、Windowsはそれを無視しているようです。これは、Microsoftコード検証ルートが「信頼されたルート証明機関」ではないためです。
- 現在のユーザーの証明書ストアとローカルマシンの証明書があります。どちらも重要なので、MMC証明書スナップインを使用して両方を表示する必要があります。Certmgr.mscは、現在のユーザーのもののみを表示します。
- Windowsは、必要に応じて「Go Daddyルート証明機関-G2」(gdroot-g2.crt)を「信頼されたルート証明機関」フォルダーに シームレスに追加し、Windows Updateからダウンロードする必要がありますが、そうではありません。詳細はこちら。
テストマシンのWindowsイベントビューアを使用して、何が起きているかを確認しました。Windowsは「GoDaddyRootCertificate Authority-G2」を自動的にフェッチするように見えますが、望ましくない未確認の発行者警告ダイアログが表示された後でのみです。ユーザーがそのダイアログを閉じるとすぐに、証明書がWindows Updateからフェッチされるため、次回のインストールは成功するはずです。興味深いことに、スターフィールド証明書(私のタイムスタンプの信頼の鎖のルート)をタイムリーに自動的にダウンロードします。
ドライバーをインストールする前に、gdroot-g2.crtをダブルクリックしてインポートすることにより、Windows7およびWindowsVistaコンピューターで機能するように署名を取得しました。このプロセスを自動化してインストーラーに追加できるかどうかを確認します。
「VeriSignClass3Public Primary Certification Authority-G5」に根ざした、VeriSign証明書で署名された別の会社(JLinkCDC.cat)のドライバーパッケージを見つけました。その証明書は私が調べたすべてのコンピューターにあるので、Go Daddyの代わりにVeriSignを使用すれば、WindowsUpdateでこの問題を回避できると思います。
VeriSign証明書がSHA1を使用しているのに対し、GoDaddy証明書は署名アルゴリズムと署名ハッシュアルゴリズムにSHA256を使用していることに気付きました。それが重要かどうかわからない。
編集#8:マイクロソフトに助けを求めた
MSDNフォーラムでのディスカッションと私の結論を参照してください:http ://social.msdn.microsoft.com/Forums/en-US/wdk/thread/1fede768-7925-4f30-8eef-ce5bd08b0b60
windows - Windows ドライバーのハードウェア ID
C# と WMI を使用してスタッフを表示しています。デバイス マネージャーの HardwareID が、inf ファイルで見つけたものとは異なることがわかりました。例えばここで私はInfファイルで見つけました:[メーカー]
しかし、デバイスマネージャーでは、
Inf ファイルの HardwareID に何かが追加されます。最後か途中か。誰か説明して?
また、WMI からデバイス インスタンス パスを照会するにはどうすればよいですか? または他の解決策はありますか?
installation - inf ファイルをインストールしますが、「新しいハードウェアが見つかりました」ウィザードはまだドライバーを必要としています
この inf の問題がしばらくの間私を悩ませていたので、誰かが私に正しい方向を示すことができるのだろうか.
ClickOnce インストーラーを使用して必須コンポーネントをインストールしています。
パッケージ (.inf、.cat、dpinst.exe、.bat) を無条件に PC に正常にダウンロードするブーストラップ パッケージを作成しました。
バッチ ファイルはコマンド「dpinst /LM」を実行し、「デバイス ドライバーのインストール ウィザード」が自動的にポップアップし、「デバイス ドライバーのインストール ウィザードの完了」が成功したことを示します。
次に、専用の USB ケーブルを PC に接続すると、「新しいハードウェアが見つかりました」ウィザードが表示されます。問題は次のとおりです。
ドライバーの場所を尋ねます。この特別な USB ケーブルに接続したことがない PC の場合、.inf ファイルと .cat ファイルの場所を明示的に指定する必要があります。そうしないと、それらを見つけることができず、失敗します。(これまで専用USBケーブルを使用していたPCの場合、自動でOKと判断します。)
「新しいハードウェアの検出」ウィザードが .inf ファイルと .cat ファイルを自動的に見つけられない原因は何だと思います。前のステップの「デバイス ドライバーのインストール」ウィザードで .inf/.cat ファイルが正常にインストールされていないようです。「c:Windows\Inf」フォルダーを調べると、関連する oem または inf ファイルが表示されません。
PS。32 ビットの Windows XP PC でテストしています。
前もって感謝します。
inf - inf2cat 22.9.10 エラー
USB フラッシュ ドライブを固定ディスクとして表示する古い Hitachi ドライバーに署名しようとしています (高速で大きなサム ドライブがある場合に非常に便利です)。
ドライバー自体は正常に動作しますが、署名しようとすると常に同じエラーが発生します。
エラー:
これは私の .inf ファイルです:
このチュートリアルを参照点として使用していました: http://www.deploymentresearch.com/Blog/tabid/62/EntryId/63/Sign-your-unsigned-drivers-Damn-It.aspx
cfadisk.inf と sys はここからダウンロードできます: リンクは最初の投稿の冒頭にあります
http://hardforum.com/showthread.php?t=1655684
どんな助けでも大歓迎です
編集:
この .inf ファイルで chkinf ユーティリティを使用しました。出力は次のとおりです。
私は本当にプログラマーではないので、これが何を意味するのか本当に理解できません。
奇妙なことに、ドライバーは機能しますが、署名を取得できません。
ありがとうございました!
よろしくお願いします、
ウォルター
windows - 複数のプラットフォームおよび OS 用の Windows INF ファイル
32 ビットまたは 64 ビットの Windows 7 または Windows 8 で動作するドライバーをインストールする Windows INF ファイルを作成しようとしています。状況ごとに 1 つずつ、すべて同じ名前の 4 つの異なる .SYS ファイルがあります。私のディストリビューションでは、4 つのディレクトリを作成しました。各ディレクトリには、1 つのドライバー ファイルが含まれています。
INF ファイルの SourceDisksNames セクションで装飾 .x86 と .amd64 を使用してみましたが、これらは 32 ビット Windows と 64 ビット Windows のインストールを正しく選択します。
これは問題なく動作しますが、Windows 7 と 8 のどちらかを選択する必要もあります。MSDN を読むと、補足装飾 .6.1 (Windows 7) と .6.2 を Windows 8 に使用できることがわかります。したがって、セクション名は次のようになります。
ただし、インストールを完了できません。「要求された機能を追加できませんでした。エラー: 必要な行が INF に見つかりませんでした」というダイアログが表示されます。
誰が私が間違っているかを見ることができますか?実際の例へのポインタは素晴らしいでしょう。