DLLファイルを別のプロセスに注入しましたが、外部EXE経由で通信したいと考えています。注入されたDLLとはどのように通信できますか? :/注入DLLからWin32プロセスを制御する(VC++。NET 2010)
答えて
あなたのEXEと、DLLが注入されたアプリケーションとの間で通信する必要があります。
したがって、EXEからの何らかの通信を待つspawn a threadにDLLが必要です。 DllMainでイベントを待つことはできません.DllMainはアプリケーションをデッドロックするためです。
簡単な方法は、named eventとwait for it to be set in your DLLを作成することです。あなたの外部EXEで、あなたのボタンがクリックされたら、あなたはset the eventです。
質問を正しく理解していれば、プロセスにDLLを注入して、外部EXE経由で通信したいと思っています。 IPC(プロセス間通信)の標準的な方法をここで使用できます。私はリンクがそれ自身で掲示されるべきではないことを知っていますが、Windows上のIPCはリンクされた記事からコピーして貼り付けることなく包括的にカバーするには広すぎます。
ここで試したことと同じことをして、named pipingとdata copyingからWM_COPYDATAをIPCに使用しました。しかし、IPCの各形式を使用する特別な理由がありましたので、単一のIPCを推薦する前に問題のドメインから多くを理解する必要があります。
何か関係のないことは、LPTHREAD_START_ROUTINEにキャストした関数でCreateThreadを呼び出していることです。つまり、ThreadProcコールバックを指しているはずです。あなたの現在の署名void WINAPI()
は、要求されたDWORD WINAPI (LPVOID)
と一致しません。
すべてのDLLが行う必要があるのは、メッセージを転送することだけであれば、メッセージのプロキシとして機能させることができます。
- DLLは、不可視のウィンドウ
- を作成しましたソースプロセス
- にウィンドウハンドルを渡しDLLは、これらのメッセージを受け取ることになりますし、それらを転送することができ
- このウィンドウにソースのプロセスディスパッチメッセージを持っています宛先ウィンドウへ
しかし、これがすべて必要な場合は、まったく中間にDLLを持つ必要はありません。これが、私があなたの問題のドメインに関するより多くの情報を必要としている理由です。
DLLを注入する実行可能ファイルの形式で何かを作成しようとしている場合は、DLLと通信してDLLが通信します。私はしばらく前に作業したprojectを見てみるとよいでしょう。これはまさにそのことです。
- 1. win32 dll in C#.net
- 2. dll注入C
DLL注入から始まる自己宣言初心者はなぜですか?経験豊かなプログラマーにとってはそれが何か? –
説明が不明です。これまでに何を達成しましたか?実行中のプロセスにコードを注入できましたか?コードを表示できますか?これまでのところ、どのように働いているとお考えですか? –
Sorta。 :P lol .. – Bawss