フィルタドライバの作り方を初心者に教えるスレ
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2007/03/31(土) 23:11:01キーボードやマウスの入力を(keybd_eventとかは使わず)
ドライバレベルでエミュレートしたいです。
よろしくおねがいします。
0002デフォルトの名無しさん
2007/03/31(土) 23:28:340003デフォルトの名無しさん
2007/03/31(土) 23:28:520004デフォルトの名無しさん
2007/03/31(土) 23:34:57本とか高いし・・・
0005デフォルトの名無しさん
2007/03/31(土) 23:36:103年は勉強しろ。
0006デフォルトの名無しさん
2007/03/31(土) 23:40:44お前ならどちらを選ぶ。
バイトで金ぐらい稼げ。
00071
2007/03/31(土) 23:58:37Windowsのデバイスドライバってのは、1つの物理デバイスに対して
複数のデバイスドライバが数珠繋ぎになっている。
それぞれのデバイスドライバ間はIRPってデータの固まりで通信している。
IRPにはスタックロケーションという作業領域があって、
数珠繋ぎのそれぞれのドライバ毎に、別々の領域が用意してある。
全体を管理しているのがIOマネージャ。
ハードウェア周りはHALにおまかせ。
(よく分かってないけど今回のフィルタドライバでは深く関連しないはず?)
で、ドライバのDriverEntryがメインエントリで、初期化処理を行う。
WDMならAddDeviceでたいがいやる。
初期化はだいたい、以下みたいな感じ。
・IoCreateDevice()でデバイスを作成して自分自身(ドライバ)と紐付けをする。
・IoAttachDevice()で、寄生対象となる数珠繋ぎドライバの先頭にとりつく
・各イベントに対してコールバックルーチンを登録する(MajorFunction[]とか)
で、各コールバックルーチンにはIRPってデータの固まりで
いろんな指示が飛んでくる。
(フィルタドライバってのは、このIRPを途中でとっつかまえるのが目的?)
基本的に何もしないでIRPを流すだけなら、
(自分より上にフィルタドライバがいるかもしれないし)
自分のスタックロケーションを数珠繋ぎの次のドライバの
スタックロケーションにそのままコピーしてやって、
IoCallDriver()で、次のドライバへIRPを流してやる。
00081
2007/04/01(日) 00:04:58上記はDDKのサンプルを読んだ感じの無いようです。
んで、kbfilterでもよくわからないのが、
キー入力のIRPを自前で作って下位ドライバに送ればいい気がするのですが、
その方法がちんぷんかんぷん・・・
KEYBOARD_INPUT_DATAって構造体があるんで、
データ型は良いと思うのですが、そもそもIRPの作り方がわからない
0009デフォルトの名無しさん
2007/04/01(日) 02:19:20別にスレ立てんでもアッチのままでよかったと思うんだが。
0010デフォルトの名無しさん
2007/04/01(日) 07:10:07> 上記はDDKのサンプルを読んだ感じの無いようです。
確かに、読んだ感じはなさげですね。(w
0011デフォルトの名無しさん
2007/04/01(日) 22:57:45■ このスレッドは過去ログ倉庫に格納されています