Project Description EasyHook starts where Microsoft Detours ends. This project supports extending (hooking) unmanaged code (APIs) with pure managed ones, from within a fully managed environment like C# using Windows 2000 SP4 and later, including Windows XP x64, Windows Vista x64 and Windows Server 2008 x64. You may write injection libraries in any .NET language compiled for AnyCPU targeting all Windows Versions since Windows 2000 SP4 and all common processor architectures using one file. By being written entirely in C# and C++.NET, EasyHook offers you a new dimension of stability and ease of use, which will totally redefine your hooking experience.
The following is an incomplete list of features:
No resource or memory leaks are left in the target A so called "Thread Deadlock Barrier" will get rid of many core problems when hooking unknown APIs; this technology is unique to EasyHook Support for Windows Vista SP1 x64 and Windows Server 2008 SP1 x64 by utilizing totally undocumented APIs, to still allow hooking into any terminal session. You can write managed hook handlers for unmanaged APIs All hooks are installed and automatically removed in a stable manner You can use all the convenience managed code provides, like NET Remoting, WPF and WCF for example EasyHook has done extensive work to provide managed handlers for unmanged code and this will finally lead into a stable way of hooking. You will be able to write injection libraries and host processes compiled for AnyCPU, which will allow you to inject your code into 32- and 64-Bit processes from 64- and 32-Bit processes by using the very same assembly in all cases. EasyHook supports RIP-relative addressing relocation for 64-Bit targets.
The library is currently still in BETA state, but should be stable enough for development. Don't hesitate to report any bugs you find, because that's the only way for me to fix them. You can be sure that any serious bug you report, will be fixed soon...
The source code is complex and has many implicit dependencies. So don't try do base development on source code but only on the public API! If your project requires any specific feature that is currently only visible to the library internals, or not implemented at all, you may open a discussion and if your desired feature is considered to be worthful, I will try to add it!