c#拦截程序的运行
有几种方法:
一.Ring3Hook: 可以写个驱动程序, 只需要在初始化代码中用PsSetCreateProcessNotifyRoutine注册一个回调函数就可以在接下去任何process创建时获得通知。 然后只要想办法通知ring3的前端程序就可以了。 如果想在ring3通过api hook实现, 那么需要至少hook所有已存在process的创建进程的api, 据我所知, 至少需要hook各进程内kernel32.dll中的CreateProcessInternalW和advapi32.dll中的CreateProcessWithLogonW,CreateProcessWithTokenW (也许还有漏掉的, 不过hook这几个api后普通程序的创建都能抓住了)
二.使用普通的HOOK,HOOK WH_SHELL消息.但是有遗漏的.只能HOOK到通过ShellExecute启动的程序.象QQ就HOOK不到.
三.做一个dll,在注册表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows键下修改键值AppInit_DLLs,把你的dll及路径加上。每个程序启动后都会Load你的dll
http://topic.csdn.net/u/20100314/13/3d6ddce1-0edf-4022-84fe-4ace6ab0db60.html
http://www.cnblogs.com/i_like_cpp/archive/2005/05/19/159196.html