Hookの概要

1754 ワード

概要
  • windowsメッセージメカニズム:osリスニング/スナップイベント->osアプリケーションメッセージキューへのメッセージ送信->アプリケーションgetmessageを使用してメッセージキュー内のメッセージを取得->dispatchmessageを呼び出してメッセージを配布os->osコールバック関数hook:システム内部でのメッセージの伝達を監視するフックであり、windowsメッセージをキャプチャ、処理することができる.予め定義された機能性のコールバック関数を呼び出す.

  • hookの原理
  • 1、システムはフックチェーンを維持しており、hookをインストールするたびにフックチェーンに要素、すなわちフック処理関数を指すポインタを追加する.
  • 2、フックチェーンがメッセージを処理する際、先進的な後処理方式を採用し、システムの各メッセージに対してフックチェーン上の各フックを通過する.
  • 3、メッセージタイプがフック監視のタイプと一致すると、フックはメッセージをキャプチャし、対応する処理を行い、処理後も伝達、修正、または阻止を継続することができる.
  • フックメッセージ処理はシステム性能に影響するため、使用時にタイムリーにアンインストールする必要はない.アンインストールには順序を付ける必要はありません.フックを取り付けるプロセスが終了すると、システムは自動的にフック
  • をアンインストールします.
    api
  • フック
  • を取り付ける
    HHOOK WINAPI SetWindowsHookEx( 
    _In_ int       idHook, //       
    _In_ HOOKPROC  lpfn,  //        
    _In_ HINSTANCE hMod, //           ,         NULL
    _In_ DWORD     dwThreadId //       ID,0            
    );
    

    フック処理関数呼び出しプロセス:プロセスAのスレッドがanyプロセスにメッセージを送信する準備ができている場合、メッセージが監視されている場合、フックによってキャプチャされ、システムはフックのフック関数が存在するDLLがプロセスAのアドレス空間にマッピングされているかどうかを検査する.マッピングされていない場合、DLLはプロセスAのアドレス空間に強制的にマッピングされます.次に、プロセスAにおけるフック関数の仮想アドレスを取得し、フック関数を呼び出す.(これもDLL注入の一つの方法です)
  • その他api
  • BOOL WINAPI UnhookWindowsHookEx(_In_ HHOOK hhk); //    
    LRESULT WINAPI CallNextHookEx(  //          
    _In_opt_ HHOOK  hhk, 
    _In_     int    nCode, 
    _In_     WPARAM wParam, 
    _In_     LPARAM lParam);
    
  • フック処理関数
  • LRESULT CALLBACK HookProc(int nCode, WPARAM wParam, LPARAM lParam) {
        ...
        return CallNextHookEx(hhook, nCode, wParam, lParam); 
    }
    

    ref
  • 私の学習ノート_Windows_HOOKプログラミング2009-12-03 11:19
  • 【Windowsコアプログラミング学習ノート】HOOK入門
  • 《windows核心プログラミングシリーズ》18談windowsフック
  • Using Hooks