jwt3000
驱动牛犊
驱动牛犊
  • 注册日期2006-08-07
  • 最后登录2016-01-09
  • 粉丝1
  • 关注0
  • 积分25分
  • 威望157点
  • 贡献值0点
  • 好评度11点
  • 原创分0分
  • 专家分0分
阅读:1685回复:7

拦截API后通知应用层决策问题

楼主#
更多 发布于:2008-07-30 14:55
我想实现进程拦截
我的方法是HOOK NtCreateSection函数
然后由驱动通知应用程序
应用程序从驱动中拿到文件名判断时候放行
同时驱动程序使用KeWaitForSingleObject函数阻塞等待应用层通知后再决定是否允许调用NtCreateSection

当NtCreateSection在多线程环境下时会有问题
比如线程1调用NtCreateSection
驱动通知应用层后阻塞等待应用层处理完
这时候线程2又调用NtCreateSection
这时候线程3又调用NtCreateSection
多次通过事件通知应用程序  导致某些通知没有被正确处理而死锁

我想通过SpinLock来防止这样的情况出现但是KeWaitForSingleObject在DISPATCH_LEVEL又不能长时间等待

请问如何解决这种情况 来实现驱动拦截API后让应用层决定是否放行
boywhp
驱动中牛
驱动中牛
  • 注册日期2007-08-09
  • 最后登录2015-04-24
  • 粉丝2
  • 关注0
  • 积分1105分
  • 威望515点
  • 贡献值0点
  • 好评度254点
  • 原创分1分
  • 专家分0分
沙发#
发布于:2008-07-30 18:09
你最好不要这样搞,如果必须要这样一定要处理好重入的问题
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
板凳#
发布于:2008-07-31 09:01
N年前搞过,由于不能适用系统的千变万化,及第3方程序的古怪行为,而放弃了。
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
safejmp
驱动牛犊
驱动牛犊
  • 注册日期2008-07-27
  • 最后登录2010-09-21
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望25点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2008-07-31 16:02
应该这样搞
1.在HookNtCreateSection 中创建EVENT事件,然后把要通知的东西放入队列并通知应用程有东西要取,最后调用KeWaitForSingleObject等待应用层处理。
2.应用层得到通知后,从队列里面获取数据,然后提示用户,根据用户提示,处理拒绝还是放行,然后设置EVENT为有效,这样内核就可以继续往下执行了。
wangjianfeng
驱动小牛
驱动小牛
  • 注册日期2004-05-28
  • 最后登录2013-10-02
  • 粉丝0
  • 关注0
  • 积分1002分
  • 威望263点
  • 贡献值0点
  • 好评度260点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2008-08-01 16:36
我是设置了超时,过了多长时间没处理的就放行了,有漏掉总比死锁好哇.
Leonsoft
驱动小牛
驱动小牛
  • 注册日期2003-05-08
  • 最后登录2012-08-11
  • 粉丝1
  • 关注0
  • 积分21分
  • 威望281点
  • 贡献值1点
  • 好评度103点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2008-08-02 12:04
这样做,会冒出各种莫名其妙的问题,还要冒着被各种杀毒软件误认为是Virus,而被杀掉的风险。貌似在Vista下,可能也行不通。。
I will do the best with what the God gave me.
jwt3000
驱动牛犊
驱动牛犊
  • 注册日期2006-08-07
  • 最后登录2016-01-09
  • 粉丝1
  • 关注0
  • 积分25分
  • 威望157点
  • 贡献值0点
  • 好评度11点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2008-08-04 21:38
感谢各位大大的答案
问一下 那完成这项任务有什么通用的模式吗
比如对注册表某些位置做保护
总是驱动截获写入请求 然后 在驱动或者在应用中决策是否允许

那这个决策该放在哪呢
一般杀软是怎么做的呢
killvxk
论坛版主
论坛版主
  • 注册日期2005-10-03
  • 最后登录2014-04-14
  • 粉丝3
  • 关注1
  • 积分1082分
  • 威望2003点
  • 贡献值0点
  • 好评度1693点
  • 原创分2分
  • 专家分0分
7楼#
发布于:2008-08-05 19:58
CallBackToRing3~~暴力解决~~
没有战争就没有进步 X3工作组 为您提供最好的军火
游客

返回顶部