2017-03-14 6 views
-1

私は他のプロセスに注入されたCBTフックを持っています。このCBTフックはC++/CLI DLLで記述され、C#DLLを参照します。このC#DLLには、C++/CLI DLLのx86およびx64ビルドに共通のタイプが含まれているため、必要です。しかし、今ではCBTフックが動作せず、C#DLLが見つからないと主張しています。これにより、CBTフックで注入されたすべてのプログラムが直前にクラッシュするようになります。CBTフック内の複数のDLL

BinaryFormatterと名前付きパイプを使用してフックプロシージャからデータを元のプロセスに戻すために、シリアライゼーションを支援するために共通タイプをC#DLLに移動しました。注入されるプロセスのアドレス空間。

私の質問は、C#DLLが実行時にフックプロシージャによって検出されるようにするにはどうすればいいですか? C#DLLとC++/CLI DLLは同じディレクトリにあります。

例外:型 'System.IO.FileNotFoundException' の未処理の例外がIvyLock.Native.dll で発生した

追加情報(これは私のC++/CLIのDLLのx86の変異体である):でしたファイルまたはアセンブリ 'IvyLock、Version = 1.0.0.0、Culture = neutral、PublicKeyToken = ...'またはその依存関係のいずれかをロードしないでください。システムは、指定されたファイルを見つけることができません。 これはIvyLock.Native.dllと同じディレクトリにある私のC#のDLLである

注:すべては、私は単純に夢中にされているプロセスと同じディレクトリにIvyLock.dllをコピーする場合は完璧に動作しますが、これを明らかにグローバルフックにスケーラブルではないので、このアプリケーションが正しく機能するには、クロスアーキテクチャのグローバルフックが必要です。私は、IvyLock.dllが検索されるパスを変更することで問題は緩和されると推測していますが、どうすればよいですか?

注2:GACにIvyLock.dllを追加も、問題を解決して、はるかにスケーラブルですが、それは管理者のアクセスを必要としても、潜在的に難しい展開する、と私はIvyLockを更新するたびに行うための痛みです.dll。可能であれば、この解決策を避けたいと思います。

+0

(プロジェクトのプロパティで設定可能な)IvyLock.dllを遅延ロードするように設定した場合、問題を解決できるはずの絶対パスを使用してLoadLibraryします。 – xanatos

+0

ここでの問題はdll1のパスではなく、app1、dll1、dll2のdll1にdll2をロードすると、検索パスはapp1のパスになります。 – xanatos

+0

待機中...エラー... .NETアセンブリの読み込みをリダイレクトしたい... http://stackoverflow.com/a/1373295/613130を使用してください(イベント 'AppDomain.CurrentDomain.AssemblyResolve'を使用してください)。 )。あなたがC++(純粋な)ソリューションを持っていて、C++/CLIアセンブリ – xanatos

答えて

0

私は最終的に.NETからのCBTフックを使用しないことでこの問題を回避しました。 CBTフックを使用する私の目的は、アプリケーションがウィンドウを開くときを検出し、パスワードが入力されるまでそのウィンドウをフリーズすることでした。代わりに、P/Invokeを使用してSuspendThreadResumeThreadを使用して、パスワードを入力するまでプロセスを一時停止してから再開します。

0

ここにX-Yの問題があります。

他のプロセスにロードされたフックはそのプロセスのゲストであり、互換性のない方法でプロセス状態を変更してはいけません。 .NETをプロセスにロードすることは互換性のないアクションです。後でメインプログラムがCLRをホストしようとすると、エラーが発生します。

他のプロセスは既に.NETを使用しており、ゲストDLLと互換性のないapp.config構成を使用している可能性があります。彼らはあなたのライブラリを使用するためのシステムを設計していませんでした。どのようにしてDLLの構成ニーズを考慮する必要がありますか?

解決策は、ゲスト(フック)DLLからすべての.NETコードを削除することです。これはC#ヘルパーDLLを意味しないだけでなく、C++/CLIネイティブコードのみを意味しません。検索パスを変更し、さらに多くの.NETアセンブリを読み込むと、問題が悪化します。

関連する問題