問題タブ [wdk]
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 - WinXP 用の仮想オーディオ デバイス ドライバーの作成方法
WinXP で最も簡単なオーディオ仮想デバイス ドライバを作成するには? 1 つの方法として WDM ドライバーを作成することは知っていますが、それは簡単な作業ではないと思います。Flash ベースのアプリケーション用にオーディオ フィルタリングを実装する必要があります。残念ながら、それを行う唯一の方法のようです-フラッシュの外部で、デバイスドライバーによって、フラッシュアプリを仮想デバイスに接続できます。いくつかの高レベル API (WDM よりも高い) を使用してデバイス ドライバーを記述できるかどうか疑問に思っていました。仮想 USB オーディオ デバイスとしての UMDF (?) または仮想デバイスを登録する dll のみを使用できます。Google トーク プラグインには、仮想 Web カメラを提供する googleadapter.dll が含まれていることがわかりますが、どのように記述したのだろうかと思います。
前もってありがとう、ternyk
windows - ファイルの内容をカーネルからユーザーモードに渡す最速の方法は?
私は簡潔にしようとしますが、完全に説明します:
これは Windows 固有です。Windows Driver Development Kit (DDK) の使用。
カーネル モードの経験がなく、初めてカーネル モード ドライバー (KMD) を作成しています。私は現在、DDK に付属している「スキャナー」ミニフィルター サンプルをいじっており、練習のためにそれを拡張しています。「スキャナー」ミニフィルターは、要求された操作を承認/拒否する前に「悪い言葉」をスキャンするために、ファイルの作成/閉じ、関連ファイルの操作をフックする、一般的な「ウイルス対策」タイプのスキャン ドライバーの基本的な概要です。
最終的な目標は、ファイルを開こうとしているプロセスまたはユーザーの速度を著しく低下させることなく、ミニフィルターが操作の完了を許可するかどうかを決定して、ユーザー モード アプリケーションでファイルを開いたときにスキャンすることです。ファイル。また、保存を試みたときにファイル全体を再度スキャンして、保存を正常に完了させるか、保存を拒否するかを決定したいと考えています。ミニフィルターのサンプルは、これらの呼び出しをフックする方法の基礎を示していますが、実際の「スキャン」部分が少し弱いです。
サンプルを拡張して、最初の 1k (サンプルの制限) だけでなく、ハッシュを生成するなど、開かれたファイル全体をスキャンすることを検討しています。ファイル全体を読み取り、元のサンプルと同じメカニズムを使用して送信するようにサンプルを変更しました。このメソッドはFltReadFile、KMD 内のファイルを読み取り、FltSendMessageバッファーをユーザー モード コンポーネントに送信するために使用します。ユーザー モード アプリケーションはGetQueuedCompletionStatus、KMD からの通知を取得し、バッファーを処理するために使用しています。
ただし、標準ライブラリ (fstream) を使用した C++ での通常のオープン/読み取りに比べて、このプロセスはかなり遅いように見えることに気付きました。この方法は、単純な C++ ユーザー アプリで単純にファイルを開いて読み取るよりも、約 4 ~ 8 倍の時間がかかります。バッファー サイズを調整して、顕著な改善が得られるかどうかを確認しました。多少の改善は見られますが、大きな効果は見られませんでした。
私は「リアルタイム」でファイルをスキャンしようとしているので、この転送速度は非常に残念で法外なものです。ファイルの内容をカーネル モード ドライバーからユーザー モード アプリケーションに転送するより高速な方法はありますか?
windows - 文書化されていない ObReferenceObjectByName Windows カーネル関数に精通している人はいますか?
wdk を使用したドライバーのプログラミングに関する非常に興味深い記事を読みました。この記事で使用された関数の 1 つは、ObReferenceObjectByName と呼ばれます。この機能は私に多くの頭痛の種をもたらしました。最初の悪い点は、Microsoft によって文書化されていないことです。2 つ目は、この記事で使用されている言語は C++ であり、コードは単純な C のままにしておきたいということです。ほとんどの場合、これが問題にならないことはわかっていますが、実際にはそうではありません。私の人生 - この機能を含める方法を理解することができました.
この記事のコードは次のようになります。
これを何時間も再現しようとしてきました。「extern」キーワードなしで宣言しようとした、呼び出し規約を変更しようとした、インクルードを変更しようとした...常に「未解決の外部シンボル...」というエラーが発生します。
本当に困っているので、どなたかアドバイスいただけると助かります。ありがとう。
64-bit - DDK/WDM 開発の問題 ... ドライバーが x64 Windows プラットフォームにロードされない
私は DDK/WDM ドライバー開発分野の初心者です。仮想デバイス ドライバーを x86 から x64 (インテル) に移植するタスクがあります。ソースコードを入手し、少し修正して、DDK (ビルド環境) で正常にコンパイルしました。しかし、ia64 Windows7 マシンにロードしようとすると、ロードしませんでした。次に、デバイスドライバーの簡単な例をいくつか試しました
-- http://www.codeproject.com/KB/system/driverdev.aspx (ハイパーリンクを投稿できるように「--」を付けました) および他のリンクからでも同じ問題が発生します。
リンクに使用している一部のライブラリが新しいマシンと互換性がなく、別の同様のライブラリにリンクするよう提案されているとフォーラムで聞きましたが、それでも機能しませんでした。
ビルドするときは、提案どおり「-cefw」コマンド ライン パラメーターを使用します。
*.inf ファイルが関連付けられていませんが、それを system32/drivers にコピーしています。WinObj を使用して、次回の再起動時にメモリに読み込まれるかどうかを確認しています。
また、このプログラム ( http://www.codeproject.com/KB/system/tdriver.aspx ) を試してドライバーをメモリにロードしましたが、それでもうまくいきませんでした。
助けてください...私はこれに行き詰まっており、締め切りはすでに過ぎています。何が間違っているのかを発見しようとして、ここで気が狂っているように感じます。
driver - ミニフィルター機能では APC を有効にする必要がありますか?
ファイルを操作する多くの Zw* 関数 ( ZwCreateFileなど) は、APC を有効にして PASSIVE_LEVEL で呼び出す必要があります: http://msdn.microsoft.com/en-us/library/ff566424%28VS.85%29.aspx。これは、内部的には I/O 操作が非同期であり、操作の完了が APC を介して配信されるためです (間違っていたら訂正してください)。
ただし、ミニフィルターの同様の関数 ( FltCreateFile、FltReadFileなど) のドキュメントでは、APC を有効にする必要があるとは指定されていません。APC を無効にして FltCreateFile/FltReadFile を呼び出しても安全ですか?
ありがとう!
windows - winDDK からサンプル portio ドライバーをインストールする際の問題
現在、ポート IO を使用してスーパー IO チップと通信するアプリケーションを構築しようとしています。その一環として、私が連絡できるカーネル モードの Windows ドライバーを開発しようとしています。そのため、Windows Driver Kit v7.1.0、ビルド 7600.16385.1 をダウンロードし、WDK が提供するサンプルのportioドライバーをコンパイルしてインストールしようとしています。
フリーおよびチェック済みの x86 XP ビルド環境の両方でドライバーをコンパイルしました。これは正常に動作しますが、提供された手順 (基本的にはハードウェアの追加ウィザードを使用し、ファイルを手動で提供するだけ) を使用して結果のドライバーをインストールしようとすると、次のエラーが発生します。
-次のハードウェアがインストールされました: サンプル PortIO ドライバー (KMDF)
-このデバイスのソフトウェアはインストールされましたが、正しく動作しない可能性があります
- Windows は、このハードウェアのドライバーを読み込めません。ドライバーが壊れているか、見つからない可能性があります。(コード 39)
したがって、破損または欠落という 2 つの説明が表示されます。私の知る限り、環境変数と .inf ファイルが欠落しているということは、生成された .sys ファイルが c:\windows\system32\drivers にないことを意味しますが、そこを見るとファイルはそこにあります。
つまり、ファイルが破損しているということです。私がドライバー コードに触れておらず、同じ問題を抱えている他の人を見つけたことを考えると、それは私のコンパイルの問題ではなく、コード自体、またはマシン タイプとマシン タイプの一般的な組み合わせに問題があるようです。コード。しかし、私は間違っているかもしれません。
これを解決する方法について何か提案はありますか?
c - ドライバーのアンロード中に WSK I/O 操作をキャンセルする
最近、Windows DDK でドライバーを作成する方法を学んでいます。システム スレッドと同期を試すいくつかのテスト ドライバーを作成した後、私はそれを一段と向上させ、役に立たないものではありますが、実際に何かを実行するドライバーを作成することにしました。
現在、私のドライバーは Winsock Kernel を使用して他のコンピューターに接続し、コマンド「exit」を取得するまで、送信したものをループしてエコー バックし、ループから抜け出します。私のループではWskReceive()、他のコンピューターからデータを取得するために呼び出した後KeWaitForMultipleObjects()、2 つの SynchronizationEvent のいずれかを待機していました。BlockEvent は IRP によって設定されCompletionRoutine()、ソケットからデータを受信したことをスレッドに知らせます。EndEvent は私のDriverUnload()ルーチンによって設定され、アンロード中であり、終了する必要があることをスレッドに伝えます。
「exit」コマンドを送信すると、スレッドは問題なく終了し、その後ドライバーを安全にアンロードできます。ただし、他のコンピューターからのデータを待機している間にドライバーを停止しようとすると、次のエラーでブルー スクリーンが表示されます。DRIVER_UNLOADED_WITHOUT_CANCELLING_PENDING_OPERATIONS
EndEvent を取得した後、ループを終了する前に、IRP をキャンセルしてIoCancelIrp()で完了しようとしましIoCompleteRequest()たが、どちらもDRIVER_IRQL_NOT_LESS_OR_EQUALエラーが発生します。
WskDisconnect()次に、受信操作が完了することを期待して を呼び出してみましたが、CANCELLING_PENDING_OPERATIONSエラーに戻りました。
ドライバーがアンロードされているときに、実行中の IRQL で WSK ソケットから保留中の I/O 操作をキャンセルするにはどうすればよいですか?
windows - Microsoft ドライバー検証ツール
Verifier ダイアログには、検証するドライバを選択するためのウィンドウがあります。
リスト コントロールには 4 つの列があります。
1. 確認しますか?
2. ドライバー名。
3. プロバイダー
4. バージョン
ドライバーのプロバイダーとバージョンが「不明」と表示されます。
これらの値を設定する方法がわかりません。
この値はどこで設定できますか? SignTool で?またはリソースファイル?
はい、これは大きな問題ではありません。しかし、私はそれを修正したいと思います。
私に教えてください。ありがとう。
編集:ドライバーにはrcファイルがあります。このファイルでは、次の値が定義されています。
VER_FILETYPE
VER_FILESUBTYPE
VER_FILEDESCRIPTION_STR
VER_INTERNALNAME_STR
VER_INTERNALNAME_STR
VER_LEGALCOPYRIGHT_YEARS
VER_LEGALCOPYRIGHT_STR
VER_ORIGINALFILENAME_STR
VER_COMPANYNAME_STR
VER_PRODUCTVERSION
VER_PRODUCTVERSION_STR
VER_FILEVERSION
VER_FILERLEVERSION_STRY
VER_PRODUCTNAME_STR
VER_
Windows エクスプローラーは、ドライバーのバージョンとデジタル サイン情報を適切に表示します。しかし、Driver Verifier は違います。
c - マイクロソフトウィンドウズドライバーキットピュアCトライキャッチ構文?
Windows Driver Kit(WDK)には、純粋なCで記述されたいくつかのドライバーコードサンプルがありますが、いくつかのtry-catch-finally構造が散りばめられています。誰かが彼らのセマンティクスを知っていますか?優れたツールと標準への準拠について、マイクロソフトに感謝します。
からのコード抽出some_file.c:
c++ - DDK によって生成された廃止された PDB ファイル
DLL から関数を呼び出す VS.NET 2002 (C++) の非常に単純なアプリケーションがあります。DLL は WINDDK でビルドされ、MSC_OPTIMIZATION は /Od /Oi に設定されます。
DLL からエクスポートされた関数にステップインしようとすると、失敗します。次に、WINDK (XP Checked 環境) によって生成された PDB ファイルからシンボルを読み込もうとしましたが、「pdb 形式は廃止されました」というメッセージが表示されます。
PDB ファイルは「Microsoft C/C++ MSF 7.00」です。
VS.NET 2002 はこの PDB ファイルを読み取ることができますか。それはおそらく古い/新しいですか?
よろしく オリバー