ApiHooks 3.1: Overview.txt


In all files means
 9X, W9X, Win9X       : MS Windows 95, 98, Millennium
 NT4                  : Windows NT 4.0
 NT5, 2K, W2K, Win2K  : Windows 2000
 NT                   : Windows NT 4.0 or Windows 2000
 ApiHookChain         : array of API_HOOK structures
 Hooks_DLL            : module which exports ApiHookChain
 AH                   : ApiHooks                          

Installation:
 Copy ApiHooks.exe into PATH and ApiHooks.dll into search path of all
processes (PATH in 9X; %SystemRoot%\SYSTEM32 in NT). Copy files from
HDK\INC into your INCLUDE directory. Copy files from HDK\LIB into your
LIB directory.

 You don't have to distribute ApiHooks.dll/exe in your release if you
don't want to. Link your module statically with ApiHooks libraries
and you're done.


About:
 ApiHooks allows to execute user code in the context/s of
specified/all local 32bit process(es) in Microsoft Windows (x86,32bit)
95, 98, ME, NT4, 2K.
 ApiHooks doesn't use drivers and can operate under NT guest account.
 ApiHooks doesn't change files or system registry.
 ApiHooks contains built-in code for (un)loading modules - "ModWorks"
and for hooking APIs - "ApiWorks".
 APIs to hook must be exported by modules. Establishing API hooks is
something like hooking interrupts in MS DOS - your module/s is/are
per-process resident and catch/es API calls between modules.
 You can change hooked function parameter/s before call to the
original function as well as you can change returned value/s
and buffers contents.
 ApiHooks exports several useful APIs in DLL that developer
can call from her/his programs.
 ApiHooks isn't only establishing API hooks - it is also un/loading
of given module from/to given process, detecting presence of given
module in given process and executing user code in given process.
 Writing ApiHooks related programs is very easy - ApiHooks supports
many compilers: Visual C++, Borland C++, LCC-Win32, Delphi, MASM, NASM,
TASM32 and partially Visual Basic.
 ApiHooks is shipped with many examples.


Contact:
EML: ApiHooks@EliCZ.com
WWW: http://EliCZ.com  http://www.EliCZ.com  http://home.EliCZ.com


Scheme:
---------------------------------Process-------------------------------

	      module0					   module1
		 |					      |
	CALL module1!API001 --------------------------------->| API001
		 |<-------------------------------------------|
		 |					      |
	  API215 |<----------------------------------CALL module0!API215
		 |------------------------------------------->|
		 |					      |
		 *					      *
-----------------------------------------------------------------------

---------------------------Process with API hooks----------------------

	      module0		   Hooooks.dll		   module1
		 |		       |		      |
	CALL module1!API001 -------->API001>----------------->| API001
		 |<-----------------<HOOOOK<------------------|
		 |		       |		      |
	  API215 |<-----------------<API215<---------CALL module0!API215
		 |------------------>HOOOOK>----------------->|
		 |		       |		      |
		 *		       *		      *
-----------------------------------------------------------------------

 Hooking is module specific, so you can hook import of selected modules
in process and watch selected pathways. Use ALL_MODULES to hook everything.