如何在启动之前为特定应用程序设置挂钩

时间:2011-02-21 11:54:26

标签: c++ c winapi hook

我有两个程序:A.exe和B.exe。 可能是B.exe调用系统函数(例如void foo())。

在A.exe程序的代码中,我创建B.exe程序的进程并等到它完成。 如果它调用foo()函数,我想要FORCE B.exe TERMINATE。

我知道可以使用GLOBAL钩子实现,但目前尚不清楚。 GLOBAL钩子可以影响其他工作流程并使它们不稳定(例如,Skype检查系统功能是否没有变化,如果不正确则崩溃)。

另外我想在启动B.exe之前设置钩子。否则将有松散/非缓存的foo()调用。

1 个答案:

答案 0 :(得分:1)

您无法使用挂钩阻止API调用。您可以注入DLL,然后通常通过修改导入存根来手动挂钩API调用。更好的解决方案是使用调试API,CreateProcess和DEBUG_PROCESS,然后是WaitForDebugEvent / ContinueDebugEvent循环。

http://www.codeproject.com/KB/system/writing_debugger_1.aspx可以很好地涵盖Windows调试器。