2009-05-27 21 views
0

64ビットシステム上で64ビット& 32ビットプロセスの両方をフックする秘密はありますか?アプリケーションのフック:: x64システム

私が現在書いているアプリケーションでは、64ビットプロセスをフックできる必要があります。 64ビットアプリケーションをフックしようとすると、メッセージは受信されませんが、32ビットプロセスは、64 & 32ビットシステムで正常に動作します。

誰かが私にこのようなことをしてはいけないと言ってくる前に、これは私にとっては非常に必要なことであることを説明しましょう。グローバルシステムフックを設定しなければ、私のアプリケーションは役に立たない/

このアプリケーションはC#/ WPFで書かれていますが、実際のフッキングを行うにはC++のDLLを使用しています。私は64ビットシステム用にdllをコンパイルしようとしましたが、それはまだやるべきことをしていません。 32ビットシステム用にコンパイルして実行すると、正確に動作するはずです。

*編集::私はウィンドウメッセージをフックについて話しています - WH_CBT & WH_SHELLメッセージ

+0

あなたはwin32のWindowsメッセージをフックすることについて話していますか? –

答えて

3

32ビットと64ビットの両方をフックするためには、あなたがいることを確認する必要があり処理します

  1. 32ビットプロセスをフックする32ビットDLLと64ビットプロセスをフックする64ビットDLL
  2. SetWindowsHookEx()が呼び出されるは、32ビットプロセスから32ビットプロセスと64ビットコードをフックする64ビットプロセスをフックします。

後者は基本的に、32ビットと64ビットのDLLをそれぞれhModパラメータとして提供するSetWindowsHookEx()を呼び出す32ビットと64ビットの両方の実行可能ファイルを作成する必要があることを意味します。

アプリケーションが32ビットの場合、64ビットプロセスを生成してSetWindowsHookEx()を呼び出し、アンフックするまでは何も実行しないでください。このプロセスが終了/終了すると、Windowsは自動的にフックを解除しますので、フックが必要なときはいつでも有効でなければならないことに注意してください。おそらくアプリケーション全体のライフタイムです。この場合、64ビットプロセスWaitForSingleObject()は、WaitForSingleObject()が完了した後で、メインアプリケーションプロセスの終了/終了とアンフックおよび終了時まで実行されます。

関連する問題