トップページ⇒tech
11コメント4KB

フィルタドライバの作り方を初心者に教えるスレ

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2007/03/31(土) 23:11:01
専門学校の2粘性です。
キーボードやマウスの入力を(keybd_eventとかは使わず)
ドライバレベルでエミュレートしたいです。
よろしくおねがいします。
0002デフォルトの名無しさん2007/03/31(土) 23:28:34
断る。
0003デフォルトの名無しさん2007/03/31(土) 23:28:52
本かって読め。
0004デフォルトの名無しさん2007/03/31(土) 23:34:57
フィルタドライバのスレってないじゃないですか。
本とか高いし・・・
0005デフォルトの名無しさん2007/03/31(土) 23:36:10
そもそも初心者が扱う内容ではない。
3年は勉強しろ。
0006デフォルトの名無しさん2007/03/31(土) 23:40:44
何もなしで3年勉強するか、本を買うか…
お前ならどちらを選ぶ。

バイトで金ぐらい稼げ。
000712007/03/31(土) 23:58:37
だいたい思い込みで書いてみる。

Windowsのデバイスドライバってのは、1つの物理デバイスに対して
複数のデバイスドライバが数珠繋ぎになっている。
それぞれのデバイスドライバ間はIRPってデータの固まりで通信している。
IRPにはスタックロケーションという作業領域があって、
数珠繋ぎのそれぞれのドライバ毎に、別々の領域が用意してある。

全体を管理しているのがIOマネージャ。
ハードウェア周りはHALにおまかせ。
(よく分かってないけど今回のフィルタドライバでは深く関連しないはず?)

で、ドライバのDriverEntryがメインエントリで、初期化処理を行う。
WDMならAddDeviceでたいがいやる。
初期化はだいたい、以下みたいな感じ。
・IoCreateDevice()でデバイスを作成して自分自身(ドライバ)と紐付けをする。
・IoAttachDevice()で、寄生対象となる数珠繋ぎドライバの先頭にとりつく
・各イベントに対してコールバックルーチンを登録する(MajorFunction[]とか)

で、各コールバックルーチンにはIRPってデータの固まりで
いろんな指示が飛んでくる。
(フィルタドライバってのは、このIRPを途中でとっつかまえるのが目的?)

基本的に何もしないでIRPを流すだけなら、
(自分より上にフィルタドライバがいるかもしれないし)
自分のスタックロケーションを数珠繋ぎの次のドライバの
スタックロケーションにそのままコピーしてやって、
IoCallDriver()で、次のドライバへIRPを流してやる。
000812007/04/01(日) 00:04:58
すみません、ageてました・・・

上記はDDKのサンプルを読んだ感じの無いようです。

んで、kbfilterでもよくわからないのが、
キー入力のIRPを自前で作って下位ドライバに送ればいい気がするのですが、
その方法がちんぷんかんぷん・・・

KEYBOARD_INPUT_DATAって構造体があるんで、
データ型は良いと思うのですが、そもそもIRPの作り方がわからない
0009デフォルトの名無しさん2007/04/01(日) 02:19:20
DDKかどっかのスレでキーボードドライバを作るだのなんだの言ってたやつか?
別にスレ立てんでもアッチのままでよかったと思うんだが。
0010デフォルトの名無しさん2007/04/01(日) 07:10:07
>>8
> 上記はDDKのサンプルを読んだ感じの無いようです。

確かに、読んだ感じはなさげですね。(w
0011デフォルトの名無しさん2007/04/01(日) 22:57:45
なさげでつ。
■ このスレッドは過去ログ倉庫に格納されています