問題タブ [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.
wdk - WDK で WDM ドライバーをビルドする方法は?
最新の WDK で WDM ドライバーをビルドしたいと考えています。WDM と WDF のソース ファイルの違いは何ですか? ビルド ターゲットを WDF ではなく WDM として指定するにはどうすればよいですか?
driver - UMDF-アプリケーションレベルでのデバイスのロック
WinUsbを介してUMDFを使用して、デバイス用の単純なUSBドライバーを作成しています。ドライバは、複数のアプリケーションで同時に使用できます。WdfDeviceLevel \WdfObjectLevelでは提供されないカスタムロックシステムを実現する必要があります。アトミックな書き込み/読み取り関数が必要です。
- デバイスのロックを取得する
- 値を書く
- 値を読み取る
- ロックを解除します
どうすればそのような関数を実装できますか?インターフェイスの関数の上にカスタム関数を公開する方法が見つかりませんでした。この特定のアトミック機能に加えて、他のすべてのアプリケーションがデバイスにアクセスするのをブロックするロックを取得する機能を各アプリケーションに与えることができれば便利です。
winapi - Windows XP で記録または再生するプロセスの列挙
システム内のサウンドカードのハンドルが開いているすべてのプロセスを列挙したいと思います。理想的には、「プロセス - サウンド カード - アクション」という関係が必要です。ここで、アクションは再生または録音になります。
Windows XP でこの情報を取得するための Win32 API はありますか? この API は新しいバージョンの Windows でも機能しますか?
wdk - Signtoolは副署名の追加を停止しました-どうしたのですか?
私は最近、非常に奇妙な問題に直面しました。当社の製品のコンパイルには、カーネルモードドライバーへの署名と副署名の追加が含まれます。これは、DDK(現在はWDK)に含まれているsigntoolの呼び出しを使用して行われます。
"%DDKBASE%\ 6001.18000 \ bin \ SelfSign \ signtool.exe" sign / T http://timestamp.globalsign.com/scripts/timstamp.dll / ac "path-to-countercert \ MSCV-GlobalSign.cer" / s SPC / n "EldoS Corporation"%1
署名されたドライバーにカウンター証明書が追加されていないことがわかった最近まで、すべてが正常に機能していました。signtoolはエラーを報告せず、証明書を黙って省略します。署名自体とメインの証明書チェーンが適切に適用され、欠落しているのは逆証明書のみです。
後のWDK(バージョン7600.16385.0)のSignToolは、同じコマンドラインを使用して正常に動作します。
問題のsigntool(同じフォルダーにあります)が付属しているcapicom.dllを再登録しようとしましたが、これは役に立ちませんでした。
7600.16385.0のsigntoolを使用できるかどうかはわかりません。たとえば、Windows2000との互換性が損なわれる可能性があるためです。
だから問題は、誰かが何がうまくいかなかったのかについての考えを持っているかどうかです。
Upd:ええと、7600 signtoolは正常に動作しているようです(つまり、そのバージョンで署名されたドライバーはXPとWindows 7で正常に動作します)。そのため、今はそのルートを使用し、将来的にはsigntoolを独自の自家製ツールに置き換えて回避します。驚き。
winapi - ポインターのインクリメントの違い b/w 32 ビットと 64 ビット
32 ビット Vista (x86) 用にコーディングされたドライバーを 64 ビット win7 (amd64) で実行しようとしましたが、実行されませんでした。多くのデバッグと試行錯誤の後、後者で動作するようになりましたが、動作する理由がわかりません。これは私がしたことです:
多くの場所で、バッファー ポインターは構造体の配列 (場所によって異なる) を指し、それらをインクリメントするために、いくつかの場所でこのタイプのステートメントが使用されました。
そしていくつかの場所で:
2枚目はゴミ返しだったので、全部1枚目に変えました。しかし、2 番目のドライバに続いて、ネット上で多くのサンプル ドライバを見つけました。私の質問:
- これらのマクロはどこで定義されていますか (Google はあまり役に立ちませんでした)?
- すべての P_ マクロがポインターであることは理解していますが、ポインターが ULONG にキャストされたのはなぜですか? これは 32 ビットでどのように機能しますか?
- PCHAR は明らかに環境に応じて幅を変更します。これに関するドキュメントを見つける場所を知っていますか?
memory-management - #pragma alloc_text(PAGE) コードがページ位置合わせされていません
WinXP 32 ビットの DDK (かなり古いバージョン: 3590) で (可能性のある) 問題に直面しています。私のドライバーには、初期化されていないいくつかの静的変数 (.bss セクションに割り当てられるべきだと思います) と、ページング可能なコード セクション (#pragma alloc_page(PAGE, func) でマークされている) 内のいくつかの関数が含まれています。ページング可能なコードは、別のオブジェクト ファイルに収集されます。リンカがスタティック コードとページング可能なコードをカーネル アドレス空間の同じページに割り当てているように見えることを発見しました (つまり、変数は 0xEFFCB0A0 にあり、関数は 0xEFFCB600 にあります - windbg で検証済み)。静的変数は割り込み環境で使用されるため、それらのページはメモリ内でロックする必要があります。しかし、同じページにスワップ可能なコードが含まれている場合、変数が突然消えるのではないかと心配しています。リンカー」
リンカー/ローダーにページング可能なコードに別のページを割り当てるように強制するにはどうすればよいですか? セクションの配置属性を強制する「#pragma」はありますか? 私は何か間違ったことをしていますか?
PS: ドライバー ローダーは、変数とコードの両方を含むページをページ プールから除外するのに十分スマートですが、ページには変数が含まれているため、書き込み可能である必要があります。実行可能コードが読み取り専用ページにあることを望みます。カーネル モードでの間違った配列アクセスは、デバッグが非常に困難です...
PPS: 関数の前後に 4096 の "nop" を追加しました... OK、動作します... 提案するより良いものはありませんか?
delphi - Delphi アプリケーションと Windows NT システム ドライバ間の通信
非常に単純なドライバーを作成しようとしています。その唯一の目的は、「PsSetCreateProcessNotifyRoutine」を登録し、カーネルから受信したコールバックで、どのプロセスが開始および停止されたかについて Win32 アプリケーションに通知することです。
このような単純なドライバーを「DriverEntry」と「DriverUnload」でビルドし、DDK でコンパイルする方法しか知りません。しかし、実際に通信を実装する方法がわかりません。IOCTL で実行できることはわかっています。しかし、それを超えて私は暗闇の中にいます。Delphiでそれを行う方法の簡単な例が見つかりません。私はそれができることだけを知っています。
だから私が探しているのは、それを行う方法についての簡単でわかりやすいチュートリアル、または付属のドライバーコードを使用したサンプルの Delphi プログラムです。コミュニケーションの方法は他にもあるかもしれません。
どんな助けでも感謝します。
winapi - WindowsドライバーのWindowsバージョンマクロ
_WIN64プラットフォームを32ビットまたは64ビットにするために使用できます。
オペレーティングシステムのバージョンを通知するために使用できるドライバー(カーネルモードコード)で使用可能なマクロはありますか?XP、2003、Vistaまたは7?
visual-studio - lib.exeが最近のWDKリリースから削除されたのはなぜですか?
これはバグですか?Visual Studio 2008ビルドシステムは、lib.exeを使用して静的ライブラリを作成します。WDKのsetenv.batを使用してビルド環境をセットアップしてから、devenv.exe/USEENVを起動します。ユーザーモードプログラムとdllのビルドは機能しますが、lib.exeがないため、静的ライブラリをビルドできません。
windows - 2 つのマウス、Windows (DirectInput、DDK、Linux など) で 1 つのマウスのみをキャプチャ
2 台のマウスを PC に接続しましたが、1 台のマウスを通常のマウスとして機能させ、2 台目のマウスのみをキャプチャするようにしたいと考えています。
最初に DirectInput を試していました。InstanceName に単語 mouse が含まれる 2 つのデバイスが表示されました。しかし、DeviceType.Mouse を持つデバイスは 1 つだけであり、実際に動作するデバイスでした。私が取得していたとき、それは両方のマウスをブロックしていました。
次に、ドライバーを作成することにしました。WinDDK をダウンロードしました。マウス フィルター ドライバーのサンプルがあります。コンパイルできました。しかし、私はドライバー プログラマーではありません。理解するのは複雑ですが、PS/2 マウスに関連するコードが含まれています。私のマウスはすべてUSBです。
.INF ファイルと共にインストールする必要があります。動的にロードされることを好みます。
それが正しい方向であるかどうかはよくわかりません。私は趣味のロボット プロジェクトのためにそれを行います。PCがマウスからセンサーとして何らかの情報を取得することを望みます。似たようなプロジェクトやソリューションが存在するに違いないと思います。
私のテーブルにもLinux PCがあります。マウスをLinuxに接続して解析する方が良いかもしれません
sudo cat /dev/input/mouse1 のように見えます - いくつかのデータを提供しますが、クリックや動きからデバイスをブロックしません。
簡単な解決策がすでに存在することを願っています
乾杯マックス