tsinghui
驱动牛犊
驱动牛犊
  • 注册日期2003-04-23
  • 最后登录2003-07-16
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1943回复:7

ndis 加密实验,怎么总是蓝屏?

楼主#
更多 发布于:2003-06-30 14:37
做了一个加密的实验驱动程序,仅仅将ip 数据包的checksum 改动一下。结果可以运行,两个安装了这个驱动的主机之间可以ping 通,但是如果使用其他的其他网络服务,例如使用foxmail 受发邮件,就回导致蓝屏,这是为什么?dump 内存的时候提示:driver_irq_level_not_equal_or_less.
antspower
驱动中牛
驱动中牛
  • 注册日期2002-10-17
  • 最后登录2010-08-03
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值2点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-06-30 14:44
你用
ping xxx.xxx.xxx.xxx -l 20000 -t
试试看,死机不?
放弃瘟草,现吃李草
baoyibao99
禁止发言
禁止发言
  • 注册日期2003-05-07
  • 最后登录2016-04-11
  • 粉丝0
  • 关注0
  • 积分894分
  • 威望8415点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-06-30 19:33
用户被禁言,该主题自动屏蔽!
tsinghui
驱动牛犊
驱动牛犊
  • 注册日期2003-04-23
  • 最后登录2003-07-16
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-07-01 11:54
你用
ping xxx.xxx.xxx.xxx -l 20000 -t
试试看,死机不?


ping 了2 分钟,好像没有问题。
antspower
驱动中牛
驱动中牛
  • 注册日期2002-10-17
  • 最后登录2010-08-03
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值2点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-07-02 21:53
在哪里修改的checksum
放弃瘟草,现吃李草
tsinghui
驱动牛犊
驱动牛犊
  • 注册日期2003-04-23
  • 最后登录2003-07-16
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-07-16 11:16
在MpSend()中,发送包之前修改checksum;
在PtReceive()中,收到报之后将checksum改回来;

发现安装了这个驱动的两个机器之间可以ping通,而与其他机器不通。所以我认为是可行的,但是为什么在使用其他网络服务的时候会兰屏呢?
antspower
驱动中牛
驱动中牛
  • 注册日期2002-10-17
  • 最后登录2010-08-03
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值2点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-07-16 12:42
你在计算CHECKSUM的时候对BUFFER进行了非法操作.
可能的情况是:TCP的数据部分不在第一个BUFFER中,而你做CHECKSUM时,必须要数据部分,所以对buffer做了越界操作.
我的解决办法是把数据全部靠到一个缓冲区里面.
在算CHECKSUM,
放弃瘟草,现吃李草
nicol
驱动大牛
驱动大牛
  • 注册日期2001-11-28
  • 最后登录2009-07-30
  • 粉丝0
  • 关注0
  • 积分45分
  • 威望5点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-07-19 21:38
你在计算CHECKSUM的时候对BUFFER进行了非法操作.
可能的情况是:TCP的数据部分不在第一个BUFFER中,而你做CHECKSUM时,必须要数据部分,所以对buffer做了越界操作.
我的解决办法是把数据全部靠到一个缓冲区里面.
在算CHECKSUM,
 


在MpSend函数里,你可以看到Packet不是一个buffer而是多个,
所以你如果要在Send前重新计算CheckSum就要自己新生一个数据包,复制数据过去,然后在这个新的连续BUFFER中重新计算CheckSum. 这样的话,还要注意在SendComplete中处理数据报的来源.别释放错资源了.

PS:如果你跟踪一下你会发现Send的PACKET的第一个BUFFER只有14个字节,呵呵MAC头而已.
==寂寞骆驼==
游客

返回顶部