• ベストアンサー

フックのタイミング

SetWindowsHookEx(dllインジェクション)を使ってAPIフックを実装するdllを作っています。 そこそこ使えるレベルまで完成したのですが、どうしてもInit時のフックができません。 フック作動中に新しいプロセスが作られると、フックが実行されdllがアタッチされると思いますが、Init以前にアタッチさせることはできるのでしょうか? といってもダイアログのコンストラクタまで見たいわけではなく、WM_INITDIALOG時に呼ばれるAPIが見たいのです。WM_INITDIALOG以前にアタッチさせる方法はあるのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

>APIフックを実装するdllを作っています。 「API関数の実体はDLL」なので、プロセスが「このDLLを使います」とDLLにアタッチしに行かない限り、フックは実行されません。 で、DLLにアタッチしに行くのは、WM_INITDIALOGが起きた後だった筈です(未確認) >WM_INITDIALOG以前にアタッチさせる方法はあるのでしょうか? フックされるのはプロセスがDLLにアタッチしに行ってからなので、プロセスがDLLにアタッチする前の時点(WM_INITDIALOGが起きる前の時点)では無理なのでは? 「フックされるのはプロセスがDLLにアタッチした直後ですが、プロセスがDLLにアタッチする前にフック出来ますか?」ってのは「缶切りが缶詰の中に入っています。この缶切りで缶は開きますか?」と同じなので、どうしようもないと思います。 どうにかするとしたら「缶詰めにフタをする前」つまり「CreateProcessをフックして、プロセスの生成前から処理を追いかけて追跡する」しか…。

death_note
質問者

お礼

ご回答ありがとうございます。 CreateProcessまで監視するのは現実的でないので、WM_INITDIALOG時のフックはできないものとしてあきらめました。

関連するQ&A

専門家に質問してみよう