あまり良い質問ではありません、すみません。
ファイルがエクスプローラーから開かれたときに警告する必要があるプログラムがあります (つまり、ShellExecute(A/W) が呼び出されます)。
残念ながら、Microsoft は、Vista 以降でこれらのイベントをフックできるようにする COM インターフェイス (IShellExecuteHook) を削除しました。これは、古いコードが変更によりクラッシュする可能性があるためと考えられます。この機能を再度有効にする回避策がありましたが、機能しなくなりました。
私はいくつかの調査を行いましたが、ShellExecute への呼び出しをキャッチする唯一の方法は、呼び出しを shell32.dll に再ルーティングすることです。現時点では、独自の DLL をエクスプローラー プロセスに挿入し、ShellExecute の IAT エントリを DLL のアドレス割り当てにコピーし、最後に ShellExecute の IAT エントリを関数を指すように変更することを検討しています。ファイルが開かれたプログラムを開き、以前にアドレスを保存した元の ShellExecute 関数にジャンプします。
ここでの私の最大の懸念はウイルス対策です。彼らは私がエクスプローラーに注入していることを気にしますか? 彼らは、私が IAT を変更していることを気にかけますか?
別の懸念は、これが安全かどうかです。エクスプローラーのセキュリティ特権が CreateRemoteThread を介したインジェクションを許可しないことは可能ですか (または可能性が高いですか)? もしそうなら、この注射を行うためのより良い方法はありますか?
一般的にこれを行うより良い方法はありますか?
編集: 将来これに遭遇する人のために、explorer.exe には shell32.dll の IAT がありません。ヘッダーがありますが、サンクはジャンク値でいっぱいなので、インポートされた関数のエントリを取得する方法はありません (私が知る限り)。
コード トンネリングがこれをフックする唯一の方法のようです。