Alterar comandos de processos em execução - C++/win32

Bom, acredito que essa técnica tem o nome de Hook,

bem, meu interesse é descobrir como as coisas funcionam em baixo nivel

se eu tenho um programa em c++ que usa api win32, e o mesmo esta sendo executado no windows, e eu quero… ou antes de executá-lo ou após, capturar seus comandos… ou seja…

a cada evento que o mesmo envia para o SO, eu quero monitorar, ver o que ele vai fazer, e então excluir/alterar/incluir comandos nesse evento (mesmo que em asm ou hexa), e então continuar a execução do mesmo como se nada tivesse acontecido

tentei fazer pelo menos um teste simples, mais o material é extremamente escasso, talvez por parecer uma técnica hacking.

gostaria se possivel de alguem que ja tenha feito um hooking no windows, que me desse um inicio de jornada para tal façanha =), preferencia a C++/C/C#/asm

Obrigado!

douglaskd
Note que seu antivírus pode interferir no processo.

http://win32assembly.online.fr/tut24.html
http://www.codeproject.com/search.aspx?q=hook&x=0&y=0&sbo=kw
http://www.codeproject.com/KB/system/hooksys.aspx
http://stackoverflow.com/questions/873658/how-can-i-hook-windows-functions-in-c-c (StackOverFlow é sempre uma boa referência)
http://en.wikipedia.org/wiki/Hooking (a parte de External Links pode ser útil).
http://www.codeproject.com/KB/DLL/Win32APIHooking_Trouble.aspx

Espero que ajude um pouco.

Abraço.