問題タブ [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 投票する
2 に答える
6245 参照

c++ - WinUsb を使用するアプリケーションのコンパイル

WinUsb.dll を使用して USB デバイスと通信するアプリケーションを作成中です。これは、カーネルにドライバーとしてインストールされた winusb.sys を介してデバイスとの通信を可能にするユーザー モード ライブラリです。

このアプリケーションは、Visual Studio 2008 を使用して C++ で作成しています。

ヘッダー WinUsb.h は Windows DDK にあるため、インクルード パス "D:\WinDDK\7100.0.0\inc\ddk" を追加します。次に、WinUsb.h に含まれる Usb.h が見つからないというエラーが表示されます。Usb.h も ddk にありますが、別のディレクトリにあるため、「D:\WinDDK\7100.0.0\inc\api」を追加します。インクルードディレクトリ。

そのパスを追加すると、すべてがトイレに行き、stdio.hやその他の奇妙な場所でコンパイルエラーが発生し始めます。

この DLL を単純に使用するために DDK ビルド システムとコンパイラを使用したくありません。これが、適切なドライバーを作成する代わりに WinUsb を使用している主な理由の 1 つです。

WinUsb.dll と Visual Studio を使用してアプリケーションを構築した人はいますか?

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

c++ - IRQL = DISPATCH_LEVEL(KbFilter / KMDF)からIOCTLを送信する

WDKでKbFilterの例を使用しており、KbFilter_ServiceCallbackによって呼び出され、DISPATCH_LEVELで実行される関数でIOCTLを送信しようとしています。この関数は、IOCTLを送信して戻るだけでよく、出力バッファーがいっぱいになるのを待たずに、非同期で起動して忘れることができます。

現在、WDF関数WdfIoTargetFormatRequestForIoctlWdfRequestSendを使用して、DISPATCH_LEVELで送信を試みても、何も取得していません。WdfRequestSendの呼び出しは成功していますが、IOCTLが受信されていないようです。

WdfIoTargetSendIoctlSynchronouslyまたはWDMパターンIoBuildDeviceIoControlRequest()とIoCallDriver()のいずれかを使用するには、 PASSIVE_LEVELが必要です。これらをPASSIVE_LEVELで呼び出す唯一の方法は、PASSIVE_LEVELで実行される別のスレッドを作成し、バッファーまたはキューを介して同期された命令を渡すことです。スピンロックとセマフォ付き。

フィルタの下のドライバーにIOCTLを渡す簡単な方法があるかどうか、またはより高いIRQLで処理する必要がある場合に、スレッド/キューが通常のパターンに近づくかどうかを誰かに教えてもらえますか?どのような状況でKeRaiseIrqlを使用できますか?これは私が使用する必要があるものですか?ありがとう。

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

kernel - 同じプロセッサ上の2つのスピンロック?

  1. 2つのCPUが同時に2つの「異なる」スピンロックを保持できますか?

  2. つまり...これは、単一(ユニプロセッサ)CPUが2つの「異なる」スピンロックを同時に保持できないことを意味しますか?

  3. つまり...これは、単一のCPU上のスピンロックの数を1より大きくすることはできないという意味ですか。

PS:「異なる」とは、異なるメモリリソースに関連付けられたスピンロックを意味します。


スピンロックが内部でどのように機能するか知っている人はいますか?...つまり、テストセットの操作中にバスをフリーズしますか?私はグーグルで検索しましたが、絶対的な答えはありません。

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

drivers - WDFEvtIoDeviceControlバッファー長

WDFドライバーでDeviceIoControl要求を処理する場合、入力/出力バッファーのサイズを取得する正しい方法は何ですか。

両方ともパラメータとして渡されるようです:

ただしWdfRequestRetrieveInputBuffer、リクエストバッファにアクセスするために必要なものも利用できます。

そのため、パラメータと(パラメータ)でInputBufferLength設定した値に違いがあるのではないかと思います。WdfRequestRetrieveInputBufferLength

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

driver - UMDF-アプリケーションレベルでのデバイスのロック

WinUsbを介してUMDFを使用して、デバイス用の単純なUSBドライバーを作成しています。ドライバは、複数のアプリケーションで同時に使用できます。WdfDeviceLevel \WdfObjectLevelでは提供されないカスタムロックシステムを実現する必要があります。アトミックな書き込み/読み取り関数が必要です。

  1. デバイスのロックを取得する
  2. 値を書く
  3. 値を読み取る
  4. ロックを解除します

どうすればそのような関数を実装できますか?インターフェイスの関数の上にカスタム関数を公開する方法が見つかりませんでした。この特定のアトミック機能に加えて、他のすべてのアプリケーションがデバイスにアクセスするのをブロックするロックを取得する機能を各アプリケーションに与えることができれば便利です。

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

windows - Windows サンプル ドライバーは正しくビルドされますが、インストールされません。

技術的にはプログラミングの質問ではないため、これが質問するのに適切な場所であるかどうかはわかりませんが、ドライバーの開発に関係しているため、とにかく:

学校の課題で、WDF サンプル ドライバーのコードを調べる必要があります。(そして少し変更) そこで、Windows Driver Kit をダウンロードし、サンプル ドライバーをビルドしてみました。(Ramdisk サンプルドライバー)

ビルドはうまくいきますが、新しいハードウェアの追加ウィザードを使用してインストールしようとすると、インストール中に失敗します。ウィザードは、「指定されたファイルが見つかりません」と表示します。他のサンプルドライバーを試したり、別のマシンで試したりしました...常に同じエラーが発生します。(ビルドとインストールについてはドキュメントに正確に従いました)

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

windows-7 - Windows 7 32ビットでのWDF UMDFドライバーのインストールの問題

Windows XP 32 ビットおよび Windows 7 64 ビットにインストールして正常に動作する単純なユーザー モード USB ドライバーがありますが、何らかの理由で Wi​​ndows 7 32 ビットに正しくインストールできません。XP 32bit と win7 32bit 用に 2 つの個別のドライバーが必要ですか? 私はそうではなかったという印象を受けました。私が使用するinfファイルは以下のとおりです。

2011 年 6 月 10 日更新、次のように inf ファイルを作り直しました。今は windows7 で動作するようですが、xp では /x86 の場所を尋ねられ、パスを指定すると先頭に \ が追加されます。それから私はそれを削除し、それは正常に動作します。次を使用して、.inf ファイルを Windows に登録します。

infFullPath は、ドライバー パッケージをコピーするプログラム ファイルの下の場所です。なぜこれが機能しないのか、誰でもわかりますか?次のようにファイルを保存します:

AbcRadio.inf
\x86\AbcRadio.dll
\x86\WudfUpdate_01009.dll
\x86\WdfCoInstaller01009.dll
\x86\WinUsbCoinstaller2.dll
\x64\AbcRadio.dll
\x64\WudfUpdate_01009.dll
\x64\WdfCoInstaller01009.dll
\x64\WinUsbCoinstaller2.dll dll

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

c++ - ディスクI/Oを透過的にリダイレクトするミニフィルタードライバーを作成したいのですが、開始に問題があります

私が現在取り組んでいるプロジェクトでは、WindowsXPでDeepFreezeやSandboxieと同様の方法でディスクI/Oをリダイレクトするために使用されるcopy-on-w/mメカニズムの実装が必要です。可能であれば、VirtualCloneDriveがディスクドライブをシミュレートしてISOイメージを透過的にマウントするのと同じように、ユーザーの変更されたファイルを「マウント」できるようにしたいと思います。

このようなプログラムは、ミニフィルタードライバーを使用してI/O要求をリダイレクトすることを理解しています。標準プロセスでは、変更されたデータをセカンダリロケーションにコピーしてから、そのデータに後でアクセスするためにそのストレージを読み取り/変更します。だから私はそこで何をする必要があるか理解していると思います。CD / DVDドライブのシミュレーションとそれにイメージをマウントすることになると、私は完全に迷子になります。

私はオンライン(Google、MSDN、The Code Projectなど)や、WindowsDriverFoundationやWindowsNTFile System Internals:A Developer's Guideを使用したドライバーの開発などの書籍を探していますが、特定の情報と例(監視、傍受について)を見つけています。リクエストのリダイレクトとループバックデバイスの作成)は困難であることが証明されています。私はまだ関連する技術にかなり慣れていないので、おそらく私は木のために森を見るのに苦労しています。

誰かが同じような状況にあり、有用なリソースを発見したのか、それとも私を正しい方向に向けて同様の機能を実装できるのか、疑問に思っていました。

編集:この質問は有用なリソースのように思われるので(私の特定のユースケースではありませんが)、今後の回答に追加するためにここにリンクしました。

いくつかの説明:

ユーザーが管理者権限を必要とせずにアプリケーションをインストールして使用できるようにするプログラムを作成しようとしています。プログラムは、ファイルシステム/レジストリの変更を別のストレージ領域(ペンドライブやネットワークストア上のファイルなど)に保存し、ホストプログラムが実行されているデスクトップにそれらをオンザフライで統合できるようにすることで機能します。 。デスクトップをUSBペンで持ち運び、プラグを差し込むと、設定が適用されます。

I / Oをリダイレクトするには、次のことができます。

  1. プロセスのインポートアドレステーブル(IAT)にパッチを適用して、アプリケーションレベルでカスタマイズされたコードを挿入します。
  2. ユーザーモードのフィルタードライバーを作成して、その場でリクエストを変更します。
  3. セキュリティを強化するには(実際には)、カーネルモードドライバーを実装して、AVソフトウェアと同様の方法でシステムサービス記述子テーブル(SSDT)にパッチを適用します。

これらのアプローチにはそれぞれ長所と短所があります。たとえば、アプローチ3はアプローチ1よりもはるかに困難です。より多くのセキュリティを提供しますが、それでも打ち負かすことができます(理論的な攻撃は'96年から、実際の攻撃は'07年から存在しています)。

私は当初、特定のセキュリティ機能を検討していました( WoW64互換性設定のようなi / oリダイレクトだけではありません)。しかし、これを見始めてから、ユーザーを自分自身から永久に保護することはできず、悪意のあるプロセスや愚かなユーザーからホストシステムを守るためにどれだけの労力を費やしても、それを打ち負かすことができることを思い出しました(または間違いを犯す可能性が高くなります。)また、サンドボックスとウイルス対策ホイールの再発明を避け、いくつかの便利な機能の作成に専念することにしました。「ツールは1つの仕事をし、それをうまくやる」という哲学がその日を勝ち取りました。

一言で言えば、私がやりたいのは、VMスナップショットと同様の機能を実装し、変更を自分のストレージ領域にリダイレクトすることだけです。下の図は少し古くなっていますが、現在よりも私の意図を伝える方が良いかもしれません:-)

初期のアプリケーション設計

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

windows - 複数のデバイスドライバー?(KMDF / WDF)

KMDFUSBドライバーを作成しました。ここで、複数(最大4つ)のデバイスをPCに接続したいと思います。どこから始めればいいですか?2番目のデバイスをPCに接続すると、最初に接続されたデバイスとまったく同じドライバーのインスタンスが使用されることに注意しました。EvtDeviceAdd(...)はデバイスごとに1回実行されますが、複数のデバイスを処理できないため、状況がおかしくなります...現在、EvtDeviceAddは次のようになっています。

どこから始めればいいですか?良い例はありますか?

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

wdf - 何もないところから WDF 読み取り要求を作成しますか?

背景: RS232 ドライバーへの仮想 USB を作成しています。しかし、私のハードウェアは USB チップ (PDIUSBD12) であり、純粋な UART チップではないため、ドライバーには特別な調整が必要です。ハイパーターミナルのようなものを使用している PC は、通常の RS232 チップと通信していると見なす必要があります。とにかく、問題はこの問題ではなく、WDFの問題を理解することです.hehe :)

問題: 私が達成したいのは、(何もないところから) 「読み取り要求」を作成し、それをハードウェアに渡すことです。悲しいことに、WdfRequestRetrieveOutputMemoryは「アクセス違反」/クラッシュを引き起こします。新しいリクエストの作成方法に根本的な問題はありますか? WdfRequestRetrieveOutputMemoryへの入力変数はどれも NULL ではありませんが、maskRequest 変数が何らかの形で間違っているのではないでしょうか?!