yongliliu
驱动小牛
驱动小牛
  • 注册日期2003-10-20
  • 最后登录2007-09-28
  • 粉丝0
  • 关注0
  • 积分11分
  • 威望2点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
阅读:1481回复:4

关于MPTransferData被NDIS调用的问题?

楼主#
更多 发布于:2003-12-08 20:57
最近改写了passthru,其中设计了两个接收数据包的处理流程:
1、明文上传
2、密文上传

当时设计并测试的时候,是打算在MPTransferData里面只实现明文的接收后续处理,密文在PtReceive调用的子函数里面判断是否是密文上传,如果是密文就直接调用NdisTransferData进行接收后续处理,否则直接调用NdisMEthIndicateReceive函数直接向上指示明文数据,这种情况完全正常。

但是当我安装sniffer这个东东之后,发现密文上传的时候,NDIS竟然有时候直接调用MPTransferData进行数据接收处理,我靠,导致系统崩溃。

大家知道,sniffer就是协议层的驱动,为什么她会影响NDIS的行为呢?

解决办法都是什么?望高手指教一二
成功不是天上掉下来的免费的丰盛的晚餐!
yongliliu
驱动小牛
驱动小牛
  • 注册日期2003-10-20
  • 最后登录2007-09-28
  • 粉丝0
  • 关注0
  • 积分11分
  • 威望2点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-12-09 09:01
需要强调的一点说明就是:当运行sniffer进行数据捕获的时候才有上面的情况发生,也就是说,NDIS在给sniffer上传数据的时候,导致NDIS误调我的passthru的MPTransferData,这种情况在NT平台上并没有发生,在2000上为什么会出现这种情况呢?
成功不是天上掉下来的免费的丰盛的晚餐!
yongliliu
驱动小牛
驱动小牛
  • 注册日期2003-10-20
  • 最后登录2007-09-28
  • 粉丝0
  • 关注0
  • 积分11分
  • 威望2点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-12-09 16:05
还有相关的小问题:
1、如何在PtReceive里面直接调用NdisTransferData,是不是先分配一个packet,然后直接调用NdisTransferData就行了。

考虑这样做的原因是可以避免NDIS调用我的MPTransferData,是否行得通?
成功不是天上掉下来的免费的丰盛的晚餐!
ljjlovernet
驱动小牛
驱动小牛
  • 注册日期2003-10-10
  • 最后登录2004-12-04
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-12-09 17:33
直接在ptReceive中处理了不行么?为什么要交给NdisTransferData??
我是来学习的。不打扫卫生
yongliliu
驱动小牛
驱动小牛
  • 注册日期2003-10-20
  • 最后登录2007-09-28
  • 粉丝0
  • 关注0
  • 积分11分
  • 威望2点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-12-09 19:34
有两种方式处理后续包:
1、注册TransferDataHandler,也就是在passthru中的MPTransferData函数中调用NdisTransferData,这种方式由NDIS来决定什么时候来调用
2、就是在passthru中的注册函数PtReceive中直接调用NdisTransferData,这种方式可以由自己来判断是否需要后续处理来调用

问题就是:

接收加密通道的数据时是直接判断并调用NdisTransferData进行后续处理的了,并不触发NDIS来调用MPTransferData;如果是接收非加密通道数据时就交给NDIS判断是否需要后续处理,如果需要NDIS则会调用注册函数MPTransferData。

这种情况在不使用sniffer进行数据捕获时是完全正常的了

但是一运行sniffer进行数据捕获时,情况就变了,接收加密通道的数据时竟然也会触发NDIS来调用MPTransferData,结果崩溃了!
成功不是天上掉下来的免费的丰盛的晚餐!
游客

返回顶部