問題タブ [wdf]
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.
driver - ドライバのアンインストール ボタンが無効になっています
仮想デバイス用の非常に単純な最初のドライバーを作成しました。.inf もあり、devcon.exeを使用してドライバーをインストールします。
正常にインストールされ、正常に機能しますが、アンインストールしようとすると問題が発生します。今のところ私の主な関心事は、[アンインストール] ボタンです。
私のドライバーはDriverObject->DriverUnload
. msdn ドキュメントを調べましたが、今のところDDUninstall
、ドライバーの INF セクションが見つかりません。
を調べると%WinDir%\inf\setupapi.app.log
、devcon.exe で削除しようとすると、次のエラーが表示されます。
ドライバーをアンインストールできるように、コードまたは .inf ファイルに欠けているものはありますか?
createfile - CreateFile は、他のプロセスが自分のデバイスを開くのを妨げません
CreateFile を使用して、USB ハードウェアへの接続を開いています。PC に 2 つ (またはそれ以上) のハードウェアが接続されている場合、PC アプリケーションの複数のインスタンス (異なる PID) がまったく同じハードウェアに接続されないようにしたいと考えています。
これは、CreateFile を dwShareMode = 0 で実行することで実現できると思いました。何らかの理由で、これは機能しません。同じ USB デバイスに対して CreateFile を実行すると、PC アプリケーションのいくつかの異なるインスタンスが有効なハンドルを取得します。
可能であれば、ドライバー証明書の署名が呼び出されるため、ドライバーを変更せずに、これを希望どおりに機能させたいと考えています。
私は何を逃したのですか?
http://msdn.microsoft.com/en-us/library/windows/desktop/aa363858(v=vs.85).aspx
windows - カーネルモードで垂直ブランクを待っていますか?
USB パイプを介してデータを送信するために、垂直ブランク割り込みとの同期が必要なドライバーを作成しています。
ユーザーモードでは、 IDXGIOutput::WaitForVBlankやいくつかの古い関数など、これに使用できる Direct X 関数があります。カーネルからそれらを使用できません。Windows 8 SDK で別のインターフェイスを見つけました: D3DKMTWitForVerticalBlankEventにはカーネル ヘッダー (ヘッダーは SDK の /km/ フォルダーにあります) もありますが、どのユーザー モード ライブラリが必要gdi32.lib
で、それとリンクするとドライバーが機能しなくなります。
垂直ブランクの発生について (ポーリングなしで) 待機または通知を受け取る方法はありますか?
driver - 方法 : ユーザー モードとカーネル モードの間で双方向通信を行う
IRP バッファーから値を抽出するドライバーを作成しました。このキーワードに基づいて、IRP を渡すか破棄する必要があります。そのため、カーネル モード ドライバーからは簡単ではないデータベースと通信する必要があります。したがって、これを行うためにアプリケーションまたはexeを使用しています。これは、IRPを渡すか破棄するかに基づいて、trueまたはfalseになります。
クライアントアプリでデータを取得するアプリとドライバを連携させたい。
パイプとして機能する一時ファイルを使用することを考えました。
何か提案してください。
winapi - DeviceIoControl がユーザー提供の入力バッファーに 12 バイトの情報を追加するのはなぜですか?
これが完全に頭のおかしい質問にならないことを願っています。
テンプレート WDF Windows USB デバイス ドライバーを編集して、フォーマットされたデータをデバイスのバルク アウト パイプの 1 つに送信しています。デバイスに内部レジスタを読み取るように指示するには、データを特定の方法で設定する必要があります。
問題は、データを必要な正確なフォーマットでバスに送ることができないことです。デバイスを列挙し、DeviceIoControl
仕様に従って設定した構造体に設定された入力バッファーを使用して呼び出す小さなテスト アプリを作成しました。
作業ケース (ソースにアクセスできないドライバーによって実行される) の USB バス トレースのコピーがあり、ドライバーでカスタム IOCTL を呼び出したときに何が起こるかについてバス トレースをキャプチャしました。バスを横切って見えるのは、12 バイトのデータを先頭に付けてセットアップしたデータ構造です。データ構造は正しいのですが、データの最初の 12 バイトが何であるかを知りたいので、ドライバーがそれらを送信しないようにします。
ドライバーは適切に作成されていると思います。ドライバーにいくつかのデバッグ トレースを入れたところ、取得したバッファーWdfRequestRetrieveInputMemory
の前に既に 12 バイトが追加されているように見えるため、これはドライバーの前に発生しているようです。
有用な情報である場合、IOCTL は のように設定されMETHOD_BUFFERED
ますFILE_ANY_ACCESS
。
これを設定するテスト コードの関連部分は非常に単純です。
バスを通過するデータは次のとおりです。80FD1200 CCCCCCCC CCCCCCCC
+ (私のデータ)。
誰にも洞察がありますか?
driver - wdf ドライバーはデバイスの再電源投入イベントをどのように処理しますか?
最近、別の人からデバイスドライバーの保守の仕事を引き継いだ。
ドライバーは、PCI-E ボードで動作します。システムの起動時に、ドライバは 128Mb のメモリを割り当て、ボード上のいくつかのレジスタを設定して、割り当てられたメモリに関する情報を渡します。後でボードが動作すると、メモリにデータが書き込まれ、他のアプリケーションがドライバを介してそれらのデータにアクセスします。
ボードは、スタンドアロン アダプターによって給電されます (PCI-E スロットではなく、デモまたは開発ボードです)。そのため、ボードの fpga プログラムに問題が発生した場合は、ボードの電源を入れ直し (これは高速です)、PC も再起動します (これは低速です。そうしないと、ボードはドライバーが割り当てたメモリについて何も認識しません)。
Here comes my problem: is it possbile for driver to know the board has been re-powered on? if it can detect the event and do something like those done when the system starts up, it will save us much time.
I haven't got much knowledge about driver development before, it would be helpful if there is any not-too-complicated tutorial/article for this kind of job. Or maybe I must find some thick books to learn from scratch?
Hope I've made myself understood and any suggestions would be greatly appreciated:-)
windows - WdfRequestIsCanceled 対 WdfRequestMarkCancelable
wdf での IO キャンセルに以下の 2 つのアプローチを使用することの長所と短所を誰でも挙げることができますか? 1) WdfRequestMarkCancelable () でリクエストをキャンセル可能としてマークします。キャンセル ルーチンを提供し、完了パスを同期します。2) IRP の処理中に WdfRequestIsCanceled() でポーリングを続けます。戻り値に基づいて完了します。
WdfRequestIsCanceled() はポーリング アプローチであるのに対し、WdfRequestMarkCancelable () は非同期であることを理解しています。しかし、WdfRequestMarkCancelable() は、完了/キャンセル パスを同期するために必要な追加の作業に値するでしょうか?
ご意見ありがとうございます。
c - WDFREQUESTを作成したCPUを取得することは可能ですか?
CompleteRequestの完了を、最初にリクエストを発行したCPUにアフィニティ化しようとしています。FdoDeviceControl中に要求を発行したCPUを取得する方法、または要求がディスパッチキューに入る前に要求がどこから来たかを確認する他の方法はありますか?
device-driver - WDF 共同インストーラーの問題
KMDF 1.5 を実行している 32 ビット Vista マシンに KMDF 1.9 ドライバーをインストールする際に問題が発生しています。共同インストーラーが Vista マシンを KMDF 1.9 に更新することを期待していました。しかし、そうではありません。
私は何を逃したのですか?
setupapi.dev.log には次のように記載されています。
KMDF 1.9 を既に取得している Win7 では、すべて正常に動作します。
usb - Windows が処理中の WDF 要求をキャンセルするのはいつですか?
一度に大量のデータを転送する USB3 デバイス用の WDF (KMDF) を使用して、Windows デバイス ドライバーを作成しています。この機能をテストするユーザー レベルのアプリケーションを作成しましたが、ほとんどの場合、動作します。
私が遭遇する問題は次のとおりです。転送中にアプリケーションを強制的に閉じる (cmd ウィンドウから CTRL + C) と、キャンセル時に進行中のデータ転送がすぐに停止し、ホストが単純なように見えることがわかりました。そのエンドポイントとの通信を停止します。これは、USB バス トレースで確認しました。リクエストはファンクション ドライバで「STATUS_CANCELLED」として返されます。
他の同様のサードパーティ製デバイスを調べて、それらのデバイスのドライバーでテスト アプリケーションを実行したところ、データ転送中にテスト アプリケーションを強制終了すると、アプリケーションが閉じる前に転送が完了することがわかりました。
私の質問:
アプリケーションが閉じられたときに、Windows はどのように/いつ処理中の要求を強制終了することを決定しますか?
リクエストを「キャンセル不可」としてマークする方法はありますか? ドキュメントを精査しましたが、転送中に舞台裏でリクエストがキャンセルされないようにするために何かをする必要があることを示唆するものは何も見つかりませんでした.
どんな洞察も感謝します、ありがとう。