追加のdllを使用せずに、スタンドアロンexeでスレッドのアタッチ/デタッチに関するDllMainのような通知を受け取ることは可能ですか?
編集:これは、私が行っているいくつかのテストに関係する理論的な質問です。現実の状況ではありません。
スレッド上で実行され、実行可能ファイルをロードする外部コードがないため、スレッドのアタッチ/デタッチ通知はありません [1]。実行可能ファイルのコードは通常、スレッドを制御します [2]。
シナリオを説明すれば、人々はそれを達成する方法をいくつか教えてくれるかもしれません。
[1] まあ、ほとんどの場合。実行可能ファイルを別のプロセスにロードすることは可能ですが、通常はそうしません。
[2] スレッド モデルとスレッドが実行可能コードではなく、OS によって作成される特定の例外があります。これらは主に COM/RPC に関連しています。
興味深い質問です。Win32 に組み込まれているものは何も知りません。さまざまなアタッチ/デタッチ メッセージを受け取ったときに、イベントを通知したり、メッセージを投稿したりする API を持つ DLL を作成する必要があるかもしれません。
別の DLL を必要としないが、いくつかのハックトリックが必要な代替手段は、デバッグ API (WaitForDebugEvent()
特に) を使用することです。CreateProcess()
アプリケーションに、フラグを使用して exe を再起動するだけの特別な「テスト」モード (おそらくコマンド ライン オプションで示される) があるDEBUG_ONLY_THIS_PROCESS
場合、親 (「デバッガー」) プロセスを呼び出しWaitForDebugEvent()
て、スレッドの開始と終了の通知を取得できます。イベントだけでなく、他の興味深いイベントの束。親プロセスは、それらをメッセージとして、またはイベントを通知することによって (必要な場合)、子プロセスに渡すことができます。必要な場合は、独自のログ記録を実行できます。
決して単純なことではありませんが、これらのテストを実行したいときのための特別なモードだけで動作し、別の DLL やイメージを必要としません。
あなたの質問は、プロセスがロードおよびアンロードされている間に通知を受け取ることです。DLL は他のプロセスによってロードされるため、これは DLL により適しています。
Exes には、同等に処理できる InitInstance と ExitInstance があります。