shark77777
驱动牛犊
驱动牛犊
  • 注册日期2004-04-15
  • 最后登录2004-08-31
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1450回复:4

关于NPF的问题,一个bug,不知大家发现没有????

楼主#
更多 发布于:2004-05-28 15:30
NPF中的NPF_BufferedWrite函数有bug,我编写了一个测试函数,调用packet.dll中的函数PacketSendPackets,结果在发送包的每个包大小较大时,例如1000字节,就会导致系统花屏,用si调试,系统运行一段时间后弹出页面错误,但是不知是错在哪儿了,那位大侠碰到过这样的事情?我现在都快被弄疯了
endicking
驱动牛犊
驱动牛犊
  • 注册日期2004-05-14
  • 最后登录2004-06-30
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-05-29 12:10
有没有忘了字节转换再发啊,我曾经忘了htons(),会使系统重启的
shark77777
驱动牛犊
驱动牛犊
  • 注册日期2004-04-15
  • 最后登录2004-08-31
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-05-31 11:28
那个地方进行字节转换?
我检查过了,没有问题,我现在用SoftIce进去调试,现在是运行一段时间就报如下错误:
   Break due to Page fault(0Eh). Faulte=0000
我用WS命令看调用堆栈,将ndis的符号表也加载后,看到错误出在NdisMSyncQueryInformationComplete处,但是我不知道为什么?
现在的想法是:在NPF_BufferedWrite中有如下代码:
  // Call the MAC
NdisSend( &Status, Open->AdapterHandle, pPacket);

if (Status != NDIS_STATUS_PENDING) {
// The send didn\'t pend so call the completion handler now
NPF_SendComplete(
Open,
pPacket,
Status
);
}

// Step to the next packet in the buffer
(PCHAR)winpcap_hdr += winpcap_hdr->caplen + sizeof(struct sf_pkthdr);

// Check if the end of the user buffer has been reached
if( (PCHAR)winpcap_hdr >= EndOfUserBuff )
{
IF_LOUD(DbgPrint(\"NPF_BufferedWrite: End of buffer.\\n\");)

return (PCHAR)winpcap_hdr - UserBuff;
}

是不是由于NPF_S
  
shark77777
驱动牛犊
驱动牛犊
  • 注册日期2004-04-15
  • 最后登录2004-08-31
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-05-31 11:30
NPF_SendComplete函数还没有处理完,就是说释放MDL和Packet时,NPF_BufferedWrite函数已经返回,所以报访问一个已经不存在的页面错误?
大家帮忙看看啊
shark77777
驱动牛犊
驱动牛犊
  • 注册日期2004-04-15
  • 最后登录2004-08-31
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-06-08 08:33
呵呵,问题已经解决了。是winpcap的一个bug哦。我已经将NPF的源码修改过了,现在运行良好,在将近10MB/S的情况下,系统CPU占用率在30%左右,呵呵,还不错
游客

返回顶部