阅读:2000回复:7
ndis 加密实验,怎么总是蓝屏?
做了一个加密的实验驱动程序,仅仅将ip 数据包的checksum 改动一下。结果可以运行,两个安装了这个驱动的主机之间可以ping 通,但是如果使用其他的其他网络服务,例如使用foxmail 受发邮件,就回导致蓝屏,这是为什么?dump 内存的时候提示:driver_irq_level_not_equal_or_less.
|
|
沙发#
发布于:2003-06-30 14:44
你用
ping xxx.xxx.xxx.xxx -l 20000 -t 试试看,死机不? |
|
|
板凳#
发布于:2003-06-30 19:33
用户被禁言,该主题自动屏蔽! |
|
地板#
发布于:2003-07-01 11:54
你用 ping 了2 分钟,好像没有问题。 |
|
地下室#
发布于:2003-07-02 21:53
在哪里修改的checksum
|
|
|
5楼#
发布于:2003-07-16 11:16
在MpSend()中,发送包之前修改checksum;
在PtReceive()中,收到报之后将checksum改回来; 发现安装了这个驱动的两个机器之间可以ping通,而与其他机器不通。所以我认为是可行的,但是为什么在使用其他网络服务的时候会兰屏呢? |
|
6楼#
发布于:2003-07-16 12:42
你在计算CHECKSUM的时候对BUFFER进行了非法操作.
可能的情况是:TCP的数据部分不在第一个BUFFER中,而你做CHECKSUM时,必须要数据部分,所以对buffer做了越界操作. 我的解决办法是把数据全部靠到一个缓冲区里面. 在算CHECKSUM, |
|
|
7楼#
发布于:2003-07-19 21:38
你在计算CHECKSUM的时候对BUFFER进行了非法操作. 对 在MpSend函数里,你可以看到Packet不是一个buffer而是多个, 所以你如果要在Send前重新计算CheckSum就要自己新生一个数据包,复制数据过去,然后在这个新的连续BUFFER中重新计算CheckSum. 这样的话,还要注意在SendComplete中处理数据报的来源.别释放错资源了. PS:如果你跟踪一下你会发现Send的PACKET的第一个BUFFER只有14个字节,呵呵MAC头而已. |
|
|