2017-02-28 19 views
0

私はIntel PinでCOM DLLをインストルメントしようとしています。残念ながら、Intel Pinはスタンドアロンのprocessesを計測するために設計されたもので、DLLは計測されません。Intercept COM dllhost.exeの呼び出し

私の質問は - 引数としてdllhost.exeでpin.exeを呼び出すことができるように、inprocサーバーホスト(dllhost.exe)を起動するためにCOMによって使用されるコマンドラインに影響を与える可能性がありますか?または、dllhost.exeの呼び出しがWindowsにハードコードされていると、私の考えは無益ですか?

+0

レジストリにはハードコードされていません。 AppId guidが必要です(CLSIDレジストリキーで宣言されています)。それから、HKEY_LOCAL_MACHINE \ SOFTWARE \ WOW6432Node \ Classes \ AppIDで探します。 DllSurrogate値は、ホストする必要があることを示します。値が空の場合、dllhost.exeになります。これを別の実行可能ファイルに変更することができます。別の名前のdllhost.exeのコピーに限定されません。 –

答えて

2

DLLHost.exeは、別の実行可能ファイルでDLL COMサーバーをインスタンス化できるDLLサロゲートの例です。 DllSurrogateExecutableレジストリキーを使用して使用する任意の実行可能ファイルを指定することができ、独自のDLLサロゲート実行ファイルcodeを実装して、Pinを直接使用することができます。

もちろん、別の問題はCOMオブジェクトの作成方法です。 DLLサロゲートは、DLLサロゲートを使用できることを指定するAppIDに対してクラスが登録されている場合にのみ使用されます。および COMオブジェクトの作成者は、CoCreateInstanceなどに対してCLSCTX_LOCAL_SERVERを指定します。そのような場合には、コンテキストを変更するために呼び出し元を変更する必要があります。

あなたのクラスがどのAppIDに登録されているかを調べるには、OleViewなどのツールを使用できますが、レジストリエディタから行うのは難しくありません。 CLSID GUIDを取得した場合は、HKEY_CLASSES_ROOT\CLSID\GUIDの下で検索してください。その下にAppID値があるかもしれません。これはHKEY_CLASSES_ROOT\AppID\GUID2を指しているGUIDであり、DLLサロゲートとして登録されているかどうか、DllSurrogateExecutableキーを置くことができるかどうかが含まれます。

+0

いいアイデア、ありがとう。残念ながら[カスタムサロゲート](https://msdn.microsoft.com/en-us/library/windows/desktop/ms682432(v = vs.85).aspx)を書くことは複雑に思えます:)しかし、確かに実行可能です。 – rustyx

関連する問題