eric.hee
驱动牛犊
驱动牛犊
  • 注册日期2002-05-21
  • 最后登录2002-10-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1188回复:5

关于包过滤的新问题。34分!

楼主#
更多 发布于:2002-05-24 14:06
呵呵。。。。。大家好,
我想写一个包过滤程序,又遇到了新的问题,

抓包工作能够顺利的进行,可是每次在抓包
进行时忽然用drivermonitor将过滤驱动
停止,系统就报错。

我估计这是由于有的irp没处理完,强行卸载
驱动的结果,我怎样才能保证所有的IRP都处理
完毕后安全的卸载?

谢谢!

最新喜欢:

zackaryzackar...
bingjie
驱动小牛
驱动小牛
  • 注册日期2001-08-15
  • 最后登录2007-11-29
  • 粉丝0
  • 关注0
  • 积分36分
  • 威望5点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-05-25 09:49
设置一个变量,并加自旋锁保护,在每个入口函数(即分发例程)和自创建的线程以及完成例程的函数入口处对该变量加一,退出该函数时对该变量减一,在卸载例程中只要判断该变量为零,就可以卸载了
.X.T.I.M.
驱动大牛
驱动大牛
  • 注册日期2001-09-22
  • 最后登录2021-08-25
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-05-25 10:25
PACKET例子里面有两个函数!一个叫IoIncrement和IoDecrement两个函数就是用来维护IRP队列的!当近来一个IRP的时候就调用IoIncrement 增量计数器!并设置EVENT[这个很重要!]!!,当处理完这个IRP的时候就调用IoIncrement 减量并RESET这个EVENT!在UNLOAD函数里面等待这个EVENT超时为0!!就是永远等待!也就是IRP没处理完就不卸载!明白了??
<IMG src="http://www.microsoft.com/traincert/images/logos/mcp.gif" border=0> <IMG src="http://www.microsoft.com/traincert/images/logos/mcdba.gif" border=0><br> <IMG src="http://www.microsoft.com/traincert/images/logos/mcse.gif" border=0> <IMG src="http://www.microsoft.com/traincert/images/logos/mcsd.gif" border=0>
.X.T.I.M.
驱动大牛
驱动大牛
  • 注册日期2001-09-22
  • 最后登录2021-08-25
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-05-25 10:28
设置一个变量,并加自旋锁保护,在每个入口函数(即分发例程)和自创建的线程以及完成例程的函数入口处对该变量加一,退出该函数时对该变量减一,在卸载例程中只要判断该变量为零,就可以卸载了
你怎么在RECIVE和RECIVEPACKET两个列程里面维护同一个自旋锁呢????还是单独放出来到一个函数里面才是明智的办法!看看PACKET的例子就明白了!你的方法是非常容易造成死锁的!DDK里面有说!!也就是专锁专用!!
<IMG src="http://www.microsoft.com/traincert/images/logos/mcp.gif" border=0> <IMG src="http://www.microsoft.com/traincert/images/logos/mcdba.gif" border=0><br> <IMG src="http://www.microsoft.com/traincert/images/logos/mcse.gif" border=0> <IMG src="http://www.microsoft.com/traincert/images/logos/mcsd.gif" border=0>
eric.hee
驱动牛犊
驱动牛犊
  • 注册日期2002-05-21
  • 最后登录2002-10-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-05-27 16:18
谢谢,我已经调通了,你们说的都有道理,
所以都给了分。
bingjie
驱动小牛
驱动小牛
  • 注册日期2001-08-15
  • 最后登录2007-11-29
  • 粉丝0
  • 关注0
  • 积分36分
  • 威望5点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-05-28 10:31
如果是自己处理IRP的话,我这个方法当然有效了,只要在Unload函数中把该IRP Pending,而在那个受保护的变量等于0时结束该IRP就可以了。这样可以同时处理多个IRP,而采用EVENT则只能串行处理每个IRP。
游客

返回顶部