私はほとんど監視アプリケーションを実装していないので、CreateWindowExA / Wを処理中にフックして、Windowsの作成を制御できるようにします。フックに使用する方法は、呼び出しからの最初の5バイトをフック関数へのアセンブラーJMP命令に置き換えることです。(はい、私はアセンブラーを知っています、私は以前に同じ方法を何度も使用しました)。フックコードの先頭でEnterCriticalSectionを使用し、InterlockedExchangeを使用して、CreateWindowExA / Wの先頭で書き込んだJMPを実際の5バイトに置き換えて、盗まれたバイトを復元し、関数を正しく呼び出すことができるようにします。私の経験によれば、すべてが正常である必要がありますが、JMPを実際のバイトに置き換えた瞬間に、他のスレッドが関数を呼び出し、バイトも置き換えられたように見えます... 。
IAT / EATテーブルのフックを使用できることはわかっていますが、現在のメソッドの何が問題になっているのか知りたいです... InterlockedExchangeが機能していないという問題は、CreateWindowExA / Wがdllの(comctl32.dll、shell32.dllから呼び出されていることです。 ...)ただし、メインの実行可能モジュールではありません。
誰かが私を助けてくれることを願っています。私の説明がよくわからない場合は、質問してください。再説明します。