2012-04-22 13 views
2

ユーザがWindowsにログオンするたびに自動的にプログラムを実行するためにレジストリの「実行」キーを使用します。HKCU \ Software \ Microsoft \ Windows \ CurrentVersion \ Runレジストリパス)。
私のアプリケーションは、Command Line DLL-Injectorを使って、explorer.exeプロセスにDLLを注入することから始まります。DLLをインジェクションするときに起動時にExplorer.exeがデッドロックされる

効果がある必要があります。(Windowsの再起動後に)ユーザがログインした後、各時間 - 私のアプリケーションが実行され、私のDLLは、それが動作するいくつかのケースでは

をExplorer.exeのために注入されていますが、いくつかのケースでは(タイミング問題、まれに再現)、インジェクタとexplorer.exeプロセスの両方がデッドロックされており、応答していません。
私はインジェクタがプロセスにDLLを注入しようとしている(とその間にサスペンドしている)ため、プロセスがすでに別のDLLをロードしているため(ロックされているため)そうすれば、両方のプロセスはロックされます==>デッドロックです。

私はDLLが実際にプロセスに注入される前にデッドロックが達成されていることを知っています。

誰もそれを避ける方法はありますか?エクスプローラに注入する前にexplorer.exeの状態を問い合わせることがありますか?エクスプローラが安定するのを待つかもしれませんか?もしそうなら、どうしたらいい?

おかげ

+8

あなたがターゲットと調整されていないため、注射は基本的に危険です。ソリューションを再設計して注入を必要としないようにすることがベストです。 –

+1

あなたのアプリケーションが起動した後、あなたのアプリケーションを待っていることでしょう。 – Deanna

答えて

0

あなたは常にDLLを使用して回避し、注射のためのあなたの実行可能ファイルの.relocセクションをリベースして、ターゲット・プロセスを中断を避けることができます。