SSDT中当多个程序同时HOOK某个函数时,怎么办他们的关系

SSDT中当多个程序同时HOOK某个函数时,怎么处理他们的关系?
本帖最后由 codeck 于 2015-09-28 16:04:43 编辑
例如:假设HOOK 系统函数OPEN,
A程序  钩住open后 变成  Aopen
B程序  在A的基础上  钩住Aopen后 变成 Bopen
C程序 在B的基础上   钩住Bopen后 变成Copen

正常情况下逻辑是: 现在Open地址已经是Copen了,这时引发Copen,发现不是所需对象就传给Bopen,发现又不是所需对象再传给Aopen,最后都不是就传给Open 。

但是一旦中间B程序关闭,这时Copen无法传给Bopen。HOOK就会开始失败。

所以简单的靠修改函数地址来HOOK似乎并不可靠,有没有办法解决?
==========================================================

我想到的办法就是利用消息机制,当触发Open时 ,开发程序内部截获出由哪个引发的Open,条件成立则完成他自身的Open,用完立刻恢复Open。这样我觉得才够动态,不会因为hook函数地址被恢复而造成程序失败;但是我现在有些技术上的问题,就是利用什么工具或者办法截获系统调用某个函数 “之前” 事件,最好能授之以渔而非鱼,能举个例最好 ?
非常感谢。
------解决思路----------------------
http://www.cnblogs.com/hibernate6/archive/2012/02/21/2521938.html
SSDT中当多个程序同时HOOK某个函数时,怎么办他们的关系