2010-11-29 13 views
5

私は非常に簡単なドライバを構築しようとしています。その唯一の目的は、 "PsSetCreateProcessNotifyRoutine"を登録し、カーネルから受け取ったコールバックに、どのWin32アプリケーションに開始および停止されたかを通知することです。デルファイアプリケーションとWindows NTシステムドライバ間の通信

"DriverEntry"と "DriverUnload"でこのような簡単なドライバを作成し、DDKでコンパイルする方法しか知りません。しかし、実際にコミュニケーションを実装する方法はわかりません。私はそれがIOCTLでできることを知っています。しかしそれ以上に私は暗闇の中にいる。私はDelphiでそれを行う方法の簡単な例を見つけることができません。私はそれができることがわかっています。

私が探しているのは、ドライバーコードの付いたデルファイプログラムの例やイベントを簡単に理解できるチュートリアルです。多分、他のコミュニケーション手段があるかもしれません。

どのようなヘルプもうまくいくでしょう。

+2

ランナーはこの質問をチェックします。http://stackoverflow.com/questions/3489501/how-to-recognize-that-an-application-intends-to-execute-run-a-file/3489779#3489779 WMIには、 'ExecNotificationQuery'イベントと' Win32_Process'クラスを組み合わせることで、プロセスの開始時または終了時を検出できます。 – RRUZ

+0

情報ありがとうございます。私は一般的にWMIが好きではありませんが、この場合は一見価値があります。非常に効果的であっても、ドライバーは実際には非常に激しい選択です。 – Runner

+0

@RRUZ、あなたのコメントはとても良かったですが、私は自分自身からの回答を受け入れました。これはまた良いことであり、実際の質問に対する答えでした。 – Runner

答えて

2

デルファイの場合でも問題ありません。 DeviceIoControl関数を使用する必要があります。それについてarticle in MSDNを読んでください。

要するに、利用可能なセットからIOCTL codesを選択する必要があります。次に、これらのコードの1つでDeviceIoControlを呼び出し、いくつかのデータを渡します。ドライバでは、その要求を処理して別のものを返します。

ユーザーモードでReadFileまたはWriteFileを呼び出して生成されたIOCTLSなどの標準IOCTLSも処理できます。

「チュートリアルでそれを行う方法」を探すのではなく、チュートリアルを探してください。それらはまったく同じです。言語に関係なく、純粋なWin32 /ネイティブAPIです。例えば、Here's oneはちょうどそれを見つけ出しました。

+0

ありがとうございます。私はデルファイの例を述べました。定数や関数プロトタイプなどを定義したり、すでに定義されている定義を探す必要があることが多いからです。私がする必要がなければ、私はそれを通過したくないです。私はショートカットを探していない、すでにそれをした人の知識。 – Runner

+2

ほとんどすべてのAPIヘッダーの翻訳は、JEDI(http://delphi-jedi.org/)から入手できます。しかし、私はあなたがユーザーモードから多くを必要としないと思う、それはDeviceIoControlと標準のWin32関数(CreateFileなど)であり、すべてWindows.pasで定義されている。 – himself

+0

+1 Jedi Apilib – Remko

関連する問題