dklkt
驱动牛犊
驱动牛犊
  • 注册日期2007-08-13
  • 最后登录2010-04-01
  • 粉丝0
  • 关注0
  • 积分14分
  • 威望32点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
阅读:1844回复:4

关于Passthru中线程阻塞的问题,请大家赐教

楼主#
更多 发布于:2009-05-12 16:26
大家好,刚开始学NDIS。想做一个类似防火墙的东西,所以看了Passthru的源代码。现在已经知道了通过修改PtReceive和PtReceivePacket函数,能够得到发往机器的数据包的内容。也可以通过简单的过滤规则将包丢掉或者发往上层协议。

我的设想是想在应用程序(Ring3)中实现更强大的包过滤规则。因此需要驱动将数据包的内容发往应用层,由应用层作出决定是否丢掉,然后再通知驱动是否接收或者丢掉。我的设想是采用Event让驱动等待,可结果是,我发现在PtReceive和PtReceivePacket函数执行的时候,都是处于DISPATCH_LEVEL级别。当我尝试在PtReceive函数里面KeWaitForSingleObject的时候,不久就会蓝屏。

这个问题困扰很久。不知在这种情况下程序该如何阻塞或者等待。请各位大侠不吝赐教!谢谢。
dklkt
驱动牛犊
驱动牛犊
  • 注册日期2007-08-13
  • 最后登录2010-04-01
  • 粉丝0
  • 关注0
  • 积分14分
  • 威望32点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2009-05-13 13:52
没人响应,我来顶一下
jyzhaiyf
驱动牛犊
驱动牛犊
  • 注册日期2004-04-16
  • 最后登录2010-10-02
  • 粉丝0
  • 关注0
  • 积分14分
  • 威望115点
  • 贡献值0点
  • 好评度12点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2009-05-14 12:46
保存到自己维护的列表里,用专门的线程来处理。
treeyan
驱动牛犊
驱动牛犊
  • 注册日期2008-04-14
  • 最后登录2013-09-11
  • 粉丝0
  • 关注0
  • 积分50分
  • 威望487点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分1分
地板#
发布于:2009-05-14 21:49
这样做可不妙, 当大量包到达时,如复制网络上的文件. 解决丢包引起的性能下降问题会更头痛
dklkt
驱动牛犊
驱动牛犊
  • 注册日期2007-08-13
  • 最后登录2010-04-01
  • 粉丝0
  • 关注0
  • 积分14分
  • 威望32点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2009-05-15 11:34
谢谢以上两位帮助。
我也是想在线程中阻塞不是好方法。

我现在的想法是先建一个自己维护的队列,每当有数据的时候就放到队列里面。系统单独开一个线程将队列里面的包不停的发往应用层。应用层处理后通过IOCTL再通知驱动层,然后驱动从队列中取出相应的包,作丢掉或者是indicate的操作。
游客

返回顶部