問題タブ [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.

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

windows - Microsoft RAM ディスク サンプル ドライバー - アクセスの問題を解決するためのアイデアはありますか?

Microsoft RAM ディスク サンプル ドライバー (VS2013 with WDK 8.1 - WDK 8.1 ドライバー サンプルも使用) のコンパイルとインストールに成功しました。

readme には、インストール後に管理者プロンプトから RAM ドライブを使用できることが記載されています。おそらくここで尋ねられるのと同じ問題: https://superuser.com/questions/344577/how-to-access-ramdisk-drive-from-non-admin-user-account-on-windows-xp

このスレッドで回答が得られたので、次のコードを RamDiskEvtDeviceAdd 関数に追加しました。

これにより、admin、world、および reserved アカウントの RWX 権限が追加されます。

これで、通常のユーザーがドライブにアクセスしてファイルを RAM ドライブにコピーできるようになりました。また、エクスプローラー (Windows 7) でも表示およびアクセスできます。しかし、私はまだファイルを削除できません(管理者であっても)。最初のプロンプトは、ファイルを削除するには管理者権限が必要であることを示しています。このプロンプトを確認すると、次のプロンプトが表示されます: 「このファイルを変更するには、Everyone からのアクセス許可が必要です。」

ディスク ドライブのプロパティを見ると、権限を調べたり付与したりできるセキュリティ タブがありません。したがって、ある種のセキュリティ記述子が欠落していると思います。

既に他の RAM ドライブの実装を調べてみましたが、おそらく異なるドライバー モデル (WDF 以外) で記述されており、この点ではまったく異なる動作をしているようです。

また、WDF に関する MSDN ページを調べてさらに情報を取得しようとしましたが、有用なものを見つけることができませんでした。

機能する RAM ドライブ ソリューションを使用しないのはなぜですか?と尋ねる人もいるかもしれません。しかし、実際の問題は、必要に応じて IO エラーを作成するように構成できるディスク ドライバーを作成することです。Linux のこのソリューションと同様: http://www.scylladb.com/2016/02/16/fault-injection-filesystem-software-testing/

そのため、単純な RAM ディスク ドライバーを使用するのが良いスタートになるかもしれないと考えました。削除アクセス権の問題を修正する方法についてのコメントは大歓迎です。

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

windows - 2台のコンピューターを接続した後の別のコンピューターでのドライバーのデバッグ

別のコンピューターでプログラムのデバッグを必要とするプロジェクトを開始しようとしています。基本的に私はファイル システム フィルター ドライバーを書いています。そしてそれは窓にあります。そのためには、ドライバーのデバッグを別のシステムで行う必要があります。

1 つのシステム (Windows 7) でドライバーを実行し、別のシステム (Windows 8.1) の Visual Studio IDE でデバッグできるように、2 台のコンピューターを接続する方法を知る必要があります。

更新: msdn で次の記事が提供されています https://msdn.microsoft.com/en-us/library/windows/hardware/hh439665(v=vs.85).aspx

ドライバーの作成は表示されますが、2 台のコンピューターを接続する方法が指定されていません。それが私の質問です。VS でリモート デバッグを行う方法と、2 台のコンピューターを接続するためのセットアップを行う方法

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

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

windows - KMDF WdfDriverCreate 関数が「リソース不足」を返す

カスタム PCIe ボードをターゲットとする kmdf ドライバーを作成しようとしています。Microsoft が提供するデフォルト プロジェクトに従って、主に文字列の名前を変更し、PCIe ボードのハードウェア ID を指定して、.inf ファイルにいくつかの小さな変更を加えました。

ドライバーの展開は正常に機能します。ドライバーがインストールされ、デバイス マネージャーに表示されますが、正しくインストールされていないか、破損している可能性があると表示されます。

デバッグ時に、リソース不足を意味する 0xC000009A のエラーで WdfDriverCreate が失敗することがわかります。

参考までに、これは kmdf テンプレート プロジェクトによって生成されたコードで、現在実行しているものです。

私の最初の質問は、何が原因でしょうか?

実行してエラーが発生した後、ログをダンプしようとしました

しかし、それは決して機能しません。以下に示すように、すべてのシンボルパスが適切にロードされていることを確認しました

「CIPDriver」は私のドライバーです。

dump コマンドを実行すると、次のような出力が表示されます。

そして .sympath の出力

C:\winsymbols は、次のガイドに従って取得した Microsoft のシンボルのキャッシュです: https://msdn.microsoft.com/en-us/library/windows/hardware/ff558829(v=vs.85).aspx

2 番目の質問は、ログをダンプするようにデバッガを正しくセットアップするにはどうすればよいですか?

ありがとう

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

windows - WDF 内部 IOCTL が出力を返さない

現在、仮想 COM ポートを公開するドライバーを作成しています。ドライバーでは、ポート FDO から内部 IOCTL をスタックに送信します。これは、PDO IO キューから処理されます。何らかの理由で、出力データが提供された出力メモリに書き込まれません。

IoCtl_Vcp_GetPortInfo (下記参照) が呼び出され、意図したとおりに動作することを windbg で確認しました。要求は STATUS_SUCCESS で完了します。WdfRequestComplete を呼び出した時点で、出力バッファーには有効なデータが含まれています。ただし、制御が GetPortInfo (以下を参照) に戻ったとき、提供されたバッファは上書きされていません。これは、受信バッファへのアクセスにハードウェア ブレークポイントを設定して確認しました。WdfIoTargetSendInteralIoctlSynchronously の呼び出し中は、読み取りも書き込みも行われません。

IOCTL の送信を担当するコードは次のとおりです。

IOCTL を処理するコード:

IOCTL コード定義:

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

windows - プログラムによるドライバー ウィンドウの再起動

私は KMDF pcie ドライバーに取り組んでいます。現在、デバイスを切断/再接続すると、Windows はデバイスが切断されたことを認識せず、ノードを再列挙せず、ドライバーを解放しません。

現在のところ、デバイス マネージャーを使用してドライバーを手動で無効化/有効化するのが最善の方法です。これにより、リロードが発生します。SetupDiSetClassInstallParams と SetupDiCallClassInstaller を使用して、SetupAPI.h を介してこれを手動で実行しようとすると、NO_ASSOCIATED_SERVICE に対応する SetupDiCallClassInstaller で 0xe0000219 エラーが発生し、これに対処する方法がわかりません。プログラムで再起動を強制するより良い方法はありますか?

または、プラグ アンド プレイ EvtDevicePrepareHardware コールバックによって通常提供される、変換されたリソース リスト WDFCMRESLIST を取得する方法はありますか? このようにして、ドライバーを再構成できました。

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

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 の実際のカーネル アドレスを示します。

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

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 は常に中断されます。

OSR USB FX2 ボードは、S0 スタンバイ タブレットがスリープ状態になった後も「A」を表示し続ける

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

c++ - ドライバーのシンボリックリンクが消える

UMDF Windows ドライバーで、\DosDevices\Global\デバイス インスタンスを追跡するために、ディレクトリにデバイスのシンボリック リンクを作成します。そのため、デバイスがホストに接続されると、シンボリック リンク\DosDevices\Global\MyDevice0が作成されます。別のデバイスが接続されると、シンボリック リンク\DosDevices\Global\MyDevice1が作成されます。次のコードでこれを実現します。

メソッドのドキュメント: IWDFDevice::CreateSymbolicLink

これは、2 つのデバイスを互いに背後にすばやく接続すると機能します。ただし、約 10 秒待ってから 3 番目のデバイスを接続すると\DosDevices\Global\MyDevice0、最初のデバイスが既にインデックス0を取得しており、まだ接続されているため、発生しないシンボリック リンクが取得されるようです。

では、しばらくするとシンボリック リンクが削除されるように見えるのはなぜですか? また、私のアプローチがデバイスインスタンスをカウントするのに適しているかどうか疑問に思っていますか?

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

windows - WHQL ドライバー テスト INF エラー

WHQL テスト「DF - コンポーネント固有の要件に対してドライバー INF を検証する」を実行すると、次のエラーが表示されます。

inf C:\Windows\Inf\oem10.inf の 103 行目にエラーがありました。フラグ 0x10000 を 'CoInstallers32' レジストリ キーに指定する必要があります。

oem10.inf の 103 行目:

HKR,,CoInstallers32,0x00010008,"WdfCoInstaller01011.dll,WdfCoInstaller"

ご覧のとおり、フラグ 0x 1 0000 が値 0x000 1 0008 で指定されています。値を 0x00010008 から 0x00010000 に変更すると、テストは正しく検証されます。問題は、0x00010008 の代わりに 0x00010000 を指定すると、Windows Vista にドライバーをインストールできないことです。

どうしてこれなの?これは HLK のバグですか? エラーが発生している WHQL テストのターゲット システムは、Windows 10 x64 です。