メッセージフックとDLL開放 (3)

| コメント(0) | トラックバック(0)
年初の(1)で書いた、WH_CALLWNDPROCRETで入れたら抜けないプロセスの話ですが、メッセージ専用ウィンドウかもしれません。

というのは、何気なく作ってみたら全く同じ挙動になったのです。メッセージ専用ウィンドウを持つアプリをMsgWnd.exe、ウィンドウプロシージャにグローバルフックを注入するアプリをProcHook.exeとして、
  • ProcHook.exeが先に立ち上がるとDLLが注入される
  • MsgWnd.exe先だと注入されない
  • MsgWnd.exeを終了させてもDLLは開放されない

話は単純で、ブロードキャストのメッセージが届かないために、ウィンドウプロシージャが呼ばれずフックが外れないため、DLLが開放されない、ということになります。

またWindowsによるDLL注入時にも解放時と同様、ウィンドウプロシージャが呼ばれる必要があると言えそうです。
とすれば、MsgWnd.exeが後からの場合はWM_CREATEその他、生成時のメッセージによってDLLが注入されると説明できます。

結局、メッセージ専用ウィンドウを列挙する方法がないため、(2)に書いた解決方法は変わらないだろうと思うのですが、フックDLLの開放ぐらいはOSで面倒を見てもらいたいものです。

(2012/12/18追記)
FindWindowExでHWND_MESSAGEを指定してループを回せば列挙できるのでした。WM_NULLを投げれば目的は達成できそうです。

トラックバック(0)

トラックバックURL: https://mychro.mydns.jp/cgi-bin/mt/mt-tb.cgi/333

コメントする

アーカイブ

ウェブページ

Powered by Movable Type 5.2.13

ホームページ