問題タブ [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.
device-driver - Toshiba ラップトップ加速度計デバイス ドライバーへのアクセス
HDD保護用の3D加速度計を備えた新しいToshiba Satellite Pro S300ラップトップ(Windows XPを実行)を持っています。このセンサーから送信されたデータを活用したいと思います。古い東芝のラップトップ/タブレットには、加速度データを抽出するためにアクセスできる DLL がありました。残念ながら、S300 にはこの DLL がないようです (DLL のハックについては、別の場所 (例:ここ) に記載されています)。
HDD Protection アプリ (ラップトップの位置と動きと同期して回転する回転 HDD のかわいい 3D ビジュアライゼーションを備えています) は、「非標準」/カスタム DLL に依存していないようです (DependencyWalker によると)。サービスまたは .sys デバイス ドライバーを介してデータにアクセスしているようです。関連するファイルを特定できたと思いますが、関連する関数を検索、名前付け、アクセス、ロード (または「逆アセンブル」) する方法がわかりません。
加速度計データを検出して使用するにはどうすればよいですか?
winapi - IOCTL を上位フィルター ドライバー (kbfiltr/moufiltr) に送信してデバイスを有効/無効にする Raw PDO
私はドライバー開発にまったく慣れておらず、キーボードまたはマウスデバイスを有効または無効にする単純なフィルタードライバーを作成しようとしています。動作させることができれば、マウスが接続されているときにラップトップのタッチパッドを無効にするために使用したいと考えています。おそらくこれを行うソフトウェアが既に存在することはわかっていますが、デバイスドライバーに本当に興味があり、これを自分で行う方法を学びます。
私は、上位フィルター ドライバーとしてインストールされた、WDK に同梱されているkbfiltrとmoufiltrの例を使用しています。kbfiltr の例では、ユーザーモード プログラムによって列挙および接続できる pdo が作成されます。これにより、KbFilter_EvtIoDeviceControlForRawPdoによって処理される PDO に IOCTL を送信できます。ただし、 KbFilter_EvtIoInternalDeviceControlを呼び出すなど、フィルター ドライバーに関連することを試してみると、次のようなことができます。
BSOD が発生します。上記のコードではありません。バニラの例では、null への設定がコメント アウトされています。Kbfilter を呼び出すだけで BSOD が発生します。デバイス拡張機能を PDO で直接設定しようとしましたが、これも BSOD の原因になります。これはおそらく、kbfiltr ではなく PDO devExt であるためでしょうか?
(関連: BSOD からスタック トレースを取得する良い方法は何ですか? テスト環境として Virtual PC を使用し、XPSP3 の未チェックのビルドを使用しています)
IOCTL_INTERNAL_KEYBOARD_DISCONNECT をドライバー スタックに直接送信することはできません (入力デバイスは一度に 1 つの接続のみを受け入れることを理解していますか?) したがって、生の PDO が必要です。実際には 2 つの IOCTL (有効化と無効化) を送信するだけで済み、これらは既に定義されているため、キーボードの切断と接続を使用するだけでよいと考えました。
これらの仮定のいずれかについて間違っている場合は、お知らせください。私は本当に初心者であることを知っていますが、PDO を介したこの種の通信に関する多くのドキュメントは見つかりませんでした。
c++ - C と C++ の構造体の違い
C++ 構造体を C に変換しようとしていますが、「宣言されていない識別子」が表示され続けますか? C++ には、構造体を参照するための別の構文がありますか?
別の構造内でタイプ KEY_STATE の変数を使用しています。
エラー C2061が発生し ます: 構文エラー: 識別子 'KEY_STATE'
...行KEY_STATE kState; それが違いを生む場合、私はWDKコンパイラで構築しています。もちろん、これはヘッダーファイルにあります。C++ WDM ドライバーを WDF と C に移植しています。
初期化子は括弧で囲むことができます。この問題を回避するには、宣言子を括弧で囲むか、typedef にします。
このエラーは、コンパイラが式をクラス テンプレート引数として検出した場合にも発生する可能性があります。typename を使用して、それが型であることをコンパイラに伝えます。
KEY_STATE を typedef 構造体に変更しても、このエラーが発生し、実際にはさらに多くのエラーが発生します。自由な括弧や、括弧が多すぎるものはありません。これは、この記事が示唆するもう 1 つのことです。
c++ - IRQL = DISPATCH_LEVEL(KbFilter / KMDF)からIOCTLを送信する
WDKでKbFilterの例を使用しており、KbFilter_ServiceCallbackによって呼び出され、DISPATCH_LEVELで実行される関数でIOCTLを送信しようとしています。この関数は、IOCTLを送信して戻るだけでよく、出力バッファーがいっぱいになるのを待たずに、非同期で起動して忘れることができます。
現在、WDF関数WdfIoTargetFormatRequestForIoctlとWdfRequestSendを使用して、DISPATCH_LEVELで送信を試みても、何も取得していません。WdfRequestSendの呼び出しは成功していますが、IOCTLが受信されていないようです。
WdfIoTargetSendIoctlSynchronouslyまたはWDMパターンIoBuildDeviceIoControlRequest()とIoCallDriver()のいずれかを使用するには、 PASSIVE_LEVELが必要です。これらをPASSIVE_LEVELで呼び出す唯一の方法は、PASSIVE_LEVELで実行される別のスレッドを作成し、バッファーまたはキューを介して同期された命令を渡すことです。スピンロックとセマフォ付き。
フィルタの下のドライバーにIOCTLを渡す簡単な方法があるかどうか、またはより高いIRQLで処理する必要がある場合に、スレッド/キューが通常のパターンに近づくかどうかを誰かに教えてもらえますか?どのような状況でKeRaiseIrqlを使用できますか?これは私が使用する必要があるものですか?ありがとう。
windows - スマート カード ドライバー (SCardLib を使用する KMDF) の問題
KMDFとSCardlibを使用して Smartcard Driver を開発しています。WDK Smarcard Sample を参照として使用しました。CardPower
とを除くすべてのコールバックを正しく実装したと思いますCardTracking
。(私のリーダーとカードは、現在、RESET コマンドと新しいカードの挿入をサポートしていません)
呼び出すテストアプリケーションを実行しようとするとSCardListReaders()
、SCARD_E_NO_READERS_AVAILABLE
. サンプルのような変更を加えた INF を使用し、SmartCardReaderGuidを使用してデバイス インターフェイスを作成し、デバイスの種類を に設定しましたFILE_DEVICE_SMARTCARD
。
他に何ができるかわかりません。これをデバッグするにはどうすればよいですか? 何か案は?
PS SCarLlib のヘッダー ファイルが WDK の inc ではなく、サンプル ディレクトリにあるのはなぜですか?
documentation - KMDFドライバーに64ビットサポートを追加するためのガイド
KMDFドライバーに64ビットサポートを追加するためのガイドやドキュメントはありますか?WDMドライバー用の優れたリンクのセットがありますが、KMDFが処理する内容と、ドライバーが処理する必要のある内容を示すKMDF固有のガイドを参照すると便利です。
編集:これまでのリンクは次のとおり
です。64ビットドライバーのプログラミングの問題(Windowsドライバーキット)
64ビットガイドライン
64ビットMicrosoftWindowsドライバーのチェックリスト
windows - WebCamの機能を公開するためにどのAPIを使用する必要がありますか?
古いUSBWebカメラ用のWindowsKMDFドライバーを設計しようとしています。
ドライバー開発/USBプロトコル側については十分な情報があると思いますが、Windowsプログラムがそれを利用できるように、ドライバーからWebカメラ機能をどのように公開する必要があるのか疑問に思っています。
このWebカメラには3つの機能があります。
- ビデオストリーム、
- オーディオストリーム、
- 「写真を撮る」ハードウェアボタン。
それらのそれぞれについて、私のWebカメラを関連するプログラム(gTalk、Skypeなど)で使用できるように、Windowsに公開するためのより自然な方法は何ですか?または、質問を元に戻すには、これらのプログラムに何が期待され、どのようにWebカメラを検出するのでしょうか。
wdf - 何もないところから WDF 読み取り要求を作成しますか?
背景: RS232 ドライバーへの仮想 USB を作成しています。しかし、私のハードウェアは USB チップ (PDIUSBD12) であり、純粋な UART チップではないため、ドライバーには特別な調整が必要です。ハイパーターミナルのようなものを使用している PC は、通常の RS232 チップと通信していると見なす必要があります。とにかく、問題はこの問題ではなく、WDFの問題を理解することです.hehe :)
問題: 私が達成したいのは、(何もないところから) 「読み取り要求」を作成し、それをハードウェアに渡すことです。悲しいことに、WdfRequestRetrieveOutputMemoryは「アクセス違反」/クラッシュを引き起こします。新しいリクエストの作成方法に根本的な問題はありますか? WdfRequestRetrieveOutputMemoryへの入力変数はどれも NULL ではありませんが、maskRequest 変数が何らかの形で間違っているのではないでしょうか?!
device-driver - KMDF フィルターでのシャットダウンの処理
私は kmdf ボリューム フィルター ドライバーに取り組んでおり、シャットダウンを処理したいと考えていました。WDFブックの記事WDM IRPとKMDFイベントコールバックとコメントは、WDFがコントロール(非PNP)デバイスに対してのみIRP_MJ_SHUTDOWNをサポートしていることを示唆しているようです。そのため、制御オブジェクトの呼び出しを追加WdfControlDeviceInitSetShutdownNotification(WdfDeviceShutdown)
し、シャットダウン時にファイルを同じボリュームに保存できるようにしました。ただし、フラッシュの前に呼び出されるドキュメント sysWdfDeviceShutdown
は表示されません。EvtDeviceWdmIrpPreprocess(IRP_MJ_FLUSH) を使用してフラッシュのコールバックを行いました。Dbg print を見ると、コールバックの前に常にフラッシュ コールバックが表示されWdfDeviceShutdown
ます。
私は何かが欠けているのだろうか。この動作に関するコメントは、これをよりよく理解するのに役立ちます。制御デバイスがファイル システムより下のボリューム フィルター レベルにあるため、以前にフラッシュが発生していました。そのため、エグゼクティブはデバイスを閉じる/通知する前にファイル システム バッファーをフラッシュします。
注: ) を使用すると、ファイルに書き込もうとするとWdfControlDeviceInitSetShutdownNotification(WdfDeviceLastChanceShutdown
エラーが発生します。0xc0000189 (STATUS_TOO_LATE)
windows - カーネルモードで垂直ブランクを待っていますか?
USB パイプを介してデータを送信するために、垂直ブランク割り込みとの同期が必要なドライバーを作成しています。
ユーザーモードでは、 IDXGIOutput::WaitForVBlankやいくつかの古い関数など、これに使用できる Direct X 関数があります。カーネルからそれらを使用できません。Windows 8 SDK で別のインターフェイスを見つけました: D3DKMTWitForVerticalBlankEventにはカーネル ヘッダー (ヘッダーは SDK の /km/ フォルダーにあります) もありますが、どのユーザー モード ライブラリが必要gdi32.lib
で、それとリンクするとドライバーが機能しなくなります。
垂直ブランクの発生について (ポーリングなしで) 待機または通知を受け取る方法はありますか?