問題タブ [kmdf]
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.
windbg - WinDBG:WDFFILEOBJECTハンドルから基になるFILE_OBJECTを取得する方法は?
私は WDFFILEOBJECT ハンドル (0x0000057fedd9b8b8) を持っており、その基になる FILE_OBJECT アドレスを知りたいので!object xxxx
、FILE_OBJECT.PointerCount
と.HandleCount
. どのwindbgコマンドを使用できますか?
!wdfkd.wdfhandle 0x0000057fedd9b8b8 f0
その情報を提供していないようです。
それが WDFDEVICE ハンドルだった場合!wdfkd.wdfdevice
、基になる DEVICE_OBJECT を教えてくれることはわかっていますが、WDFFILEOBJECT はどうでしょうか。
====== 解決済み (数日後) =====
スヌーンのヒントに従って、私はそれを理解しました。ライブ情報は以下。
今回は FileObject= 0x0000057fede811b8です。
!wdfkd.handle 0x0000057fede811b8 f0
ハンドル値 0x0000057fede811b8 は有効なカーネル アドレスではないため、最初に使用する必要が!wdfkd.handle
あります。ハンドルの背後にある KMDF FxObject の実際のカーネル アドレスを示します。
windows - FS 開発 - KMDF Windows ドライバー
私はここが初めてで、tar 'filesystem' (マウント tar) 用のコンセプト fs ドライバーを開発しようとしています。私の質問は、OS はパーティションに TAR ファイルシステムがあることをどのように検出し、ドライバーを自動的にロードするのですか?
driver - Windows が「コネクト スタンバイ」になったときに、ドライバーに USB デバイスをサスペンドさせる方法
x86 Windows 10 タブレットでOSR USB FX2 learning-kitを試しているところ、省電力に関連する問題が見つかりました。
ソフトウェア環境:
- WDK10 サンプル コードkmdf_fx2
- WDK10 10.0.10240 バージョン
- Visual Studio 2015 更新プログラム 1
- Windows 10 x64 10586 を実行しているタブレット。
powercfg /a
は、このタブレットが「コネクト スタンバイ」をサポートしていることを示しています。
次の動作が見られます。タブレットで実行
これにより、同期 ReadFile() で EXE ブロックが作成されます。次に、Windows の [スタート] ロゴをタップし、[電源] -> [スリープ] を実行すると、タブレットの画面がオフになり、スリープ状態になったと思います (少なくともすぐにスリープ状態になります)。
10 秒待ちます。OSR FX2 ボードの 7 セグメント LED は、 「S」に変わる代わりに「A」を示し続けます (サスペンドを意味します)。「A」がまだ表示されている状態で、さらに 100 秒待ちます。
「A」は、SOF フレームがまだ USB ワイヤ上でアクティブであることを意味します。これは、省電力に大きく反します。
対照的に、USB キーボードがまさにタブレットに接続されている場合。タブレットをスリープ状態にすると、SOF フレームが停止します (= USB サスペンド、これは Beagle USB 480 USB アナライザーで確認できます)。
私の質問は明確です:タブレットをスリープ状態にするとSOFフレームを停止できるように、osrusbfx2ドライバーを変更するにはどうすればよいですか。
背景情報:
- OSR FX2 をタブレットに接続するだけで osrusbfx2.exe を実行しない場合、テーブルが動作しているかスリープ状態かに関係なく、FX2 は 10 秒後にサスペンド状態になります。キーボードドライバーはどのようにそれを達成しますか?
- 「コネクト スタンバイ」をサポートしていないが従来の S1 または S3 スタンバイをサポートする Windows システムでは、Windows がスリープ状態になると FX2 は常に中断されます。
windows - ユニバーサル Hello World Windows ドライバー (KMDF) を仮想マシンにデプロイする方法
これに対処する答えが見つかりません。kmdf ドライバーのプログラミングを学習しようとしていますが、これを同じマシン上の仮想マシンで実行しようとしています。Visual Studio からプロセスにアタッチし、パイプを使用してカーネルをデバッグできるように、VirtualBox をセットアップしました。侵入したり、踏み込んだりすることはできますが、hello world ドライバーが何をすべきかについてはよくわかりません。ビルド プロセス中に作成された証明書をインストールできます。しかし、ドライバーを展開して仮想マシンでテストするにはどうすればよいでしょうか。仮想マシンの自動展開は不可能であることがわかりました。
どんな助けでも大歓迎です。
windows - デバイス ドライバー アプリケーション (KMDF) を開発するために Visual Studio 2015 を構成する方法を教えてください。
私はデバイス ドライバー開発の初心者で、自分の でプロジェクトを開発するように構成しようとしてVisual Studio 2015
います。Visual Studio でプロジェクトを作成すると、プロジェクトがのようなファイルやその他のオブジェクトを見つけることができません。プロジェクトが KMDF ライブラリまたはヘッダー ファイルを検索しているようです。KMDF
windows 7
Visual Studio 2015, Windows Driver Kit(WDK)10
SDK10
WDF->KMDF
"device.tmh"
NTSTATUS
をインストールするWDK10
と、SDK10
「windows kits」フォルダとその中に「8.0、8.1、および 10」フォルダが作成されます。
どこが間違っているか、ライブラリパスを設定してすべてのエラーを削除する方法を教えてください。
ありがとう。
visual-studio-2015 - vs2015 の DriverEntry()/Unload() 関数で毎回ブレークポイントがヒットするわけではありません
DriverEntry() および Unload() 関数に複数のソース行のブレークポイントを設定しました。ターゲット サイトのデバイス マネージャーで、ドライバーの停止/再起動機能を継続的に操作しますが、DriverEntry()/Unload() 関数で毎回ヒットするとは限らないブレークポイント。DriverEntry()/Unload() でブレークポイントがヒットする場合もあれば、DriverEntry()/Unload() でブレークポイントがヒットしない場合もあります。DriverEntry()/Unload() の特定のソース行 (Line10 を想定) でブレークポイントがヒットする可能性がある場合でも、F5 キーを押して続行すると、ブレークポイントを設定した次の行 line11 でヒットを解除することもできます. 上記のブレークポイントの動作については、Visual Studio ドライバー開発環境では正常または nu-normal です ??? ありがとう !
注 : Windows 10 pro がターゲット コンピューターにインストールされ、Windows 8.1 ホームがホスト コンピューターにインストールされ、WDK10 を搭載した Visual Studio 2015 pro update2 をイーサネット ネットワーク経由で使用して、ターゲット ノートブックとホスト ノートブックを接続します。
c++ - KMDF のマルチスレッド DeviceIOControl
質問に入る前に、私が現在取り組んでいることについて説明します。これにより、私がすでに行った/試したことについての適切なアイデアが得られます。
DeviceIOControl 呼び出しを KMDF ドライバー (純粋なソフトウェア、ハードウェアなし) に発行するマルチスレッド ユーザーモード Windows デスクトップ アプリケーションがあります。5 つの個別のスレッドがあり、すべてがドライバーに対して同じカスタム IOCTL 呼び出しを常に行います。このリクエストは次のもので構成されます。
- PsLookupProcessByProcessId を使用して、メモリを読み取るプロセスを取得します。
- MmCopyVirtualMemory を使用して、要求されたメモリを提供されたバッファーにコピーします。
- ObDereferenceObject を使用して、参照カウントをデクリメントします。
ドライバーは現在これをシリアルに実行しており、ユーザー モード アプリケーションの主なボトルネックは、メモリの読み取りが完了するのを待っていることです。シーンを「レンダリング」するには、すべてを完了する必要があります。
DeviceIOControl リクエストの量をできる限り減らしたので、オーバーラップした IO を調査し、各スレッドがリクエストを非同期に送信できるようにしました。私の質問は、ドライバーで複数のスレッドを使用して異なるアドレスから同時に読み取ることができるかどうかわからないため、これが試してみる価値があるかどうかです。