views:

405

answers:

0

Here is my task:

  • Inject custom managed code into running managed WPF application (i.e. my code should run in other AppDomain)
  • Injected code must be executed on UI thread

When I say 'best' I mean that:

  • Injection process must be as stable as possible (no thread deadlocks, etc.)
  • Code should run on x86 and x64 platforms without problem (especially on Vista x64)

Minimal use-case

  • select running WPF program
  • inject custom code
  • inject code changes title of the main window of target process to "Code Injected"

Solutions I'm evaluating:

1) Injection via windows hooks (like in Snoop)

pros:

  • injected code runs on UI thread

cons:

  • requires mixed (c++/cli) external dll
  • hard to debug

2) Injection via EasyHook library

pros:

  • library looks solid and well-tested

cons:

  • didn't find a way to run code on UI thread
  • injection library must be signed and installed in GAC

3) Injection via WriteProcessMemory/CreateRemoteThreadEx/LoadLibrary

pros:

  • simple

cons:

  • very unstable (code must be executed in DllMain, CLR hosting required, etc)


I'm going to use method #1. Can you recommend a better approach?

Are there any decent techniques based on CLR hosting in unmanaged DLLs ?

Note, that I'm aware of these questions: