我有两个程序:A.exe和B.exe。 可能是B.exe调用系统函数(例如void foo())。
在A.exe程序的代码中,我创建B.exe程序的进程并等到它完成。 如果它调用foo()函数,我想要FORCE B.exe TERMINATE。
我知道可以使用GLOBAL钩子实现,但目前尚不清楚。 GLOBAL钩子可以影响其他工作流程并使它们不稳定(例如,Skype检查系统功能是否没有变化,如果不正确则崩溃)。
另外我想在启动B.exe之前设置钩子。否则将有松散/非缓存的foo()调用。
答案 0 :(得分:1)
您无法使用挂钩阻止API调用。您可以注入DLL,然后通常通过修改导入存根来手动挂钩API调用。更好的解决方案是使用调试API,CreateProcess和DEBUG_PROCESS,然后是WaitForDebugEvent / ContinueDebugEvent循环。
http://www.codeproject.com/KB/system/writing_debugger_1.aspx可以很好地涵盖Windows调试器。