2

ユーザーが Windows にログオンするたびに ( HKCU\Software\Microsoft\Windows\CurrentVersion\Runレジストリ パスを使用して) レジストリの "run" キーを使用してプログラムを自動的に実行します。私のアプリケーションは、 Command Line DLL-Injector
を使用して、explorer.exe プロセスに DLL を挿入することから始めます。

ユーザーがログインするたびに (Windows の再起動後) - アプリケーションが実行され、DLL が explorer.exe に挿入されます。

場合によっては機能しますが、ほとんどの場合 (タイミングの問題で、ほとんど再現されません)、インジェクターと explorer.exe プロセスの両方がデッドロック状態になり、応答しません。
よくわかりませんが、プロセスが既に別の DLL をロードしている (つまりロックされている) 間に、インジェクターがプロセスに DLL を挿入しようとしている (そして、そうしている間は中断している) ために発生すると思います。そうすれば、両方のプロセスがロックされます ==> デッドロック。

DLL が実際にプロセスに挿入される前にデッドロックが発生することはわかっています。

誰もそれを回避する方法を知っていますか? 注入する前に、explorer.exe の状態を照会することはありますか? エクスプローラーが安定するのを待ってください。もしそうなら - どうすればそれを行うことができますか?

ありがとう

4

1 に答える 1

0

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

于 2012-05-21T04:38:08.977 に答える