cross_sky
驱动小牛
驱动小牛
  • 注册日期2004-06-17
  • 最后登录2012-09-07
  • 粉丝0
  • 关注0
  • 积分858分
  • 威望727点
  • 贡献值0点
  • 好评度77点
  • 原创分0分
  • 专家分0分
阅读:1333回复:8

如何在协议驱动中重用数据包

楼主#
更多 发布于:2005-07-19 23:02
            我是在绑定网卡时分配的包池,包描述符,缓冲区池,缓冲区描述符,以及内存,共申请了2048个缓冲区描述符.在ReceiveIndicate函数中每次将一个缓冲区描述符链接到同一个包描述符,然后使用这个包描述符.然后在TransferDataComplete函数中通过NdisUchainBufferAtFront来释放缓冲区,再将相应的OOB数据置0,然后重用数据包(因为书上说这样能大大提高性能)而不释放这个包,但我发现2048个缓冲区描述符用完了以后再收到包就会引起页错误.不知道是哪儿的问题,请高手们指教.或者有没有重用数据包的例子,谢谢!
sky
cross_sky
驱动小牛
驱动小牛
  • 注册日期2004-06-17
  • 最后登录2012-09-07
  • 粉丝0
  • 关注0
  • 积分858分
  • 威望727点
  • 贡献值0点
  • 好评度77点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-07-20 18:34
页错误的问题我已经解决了,但现在当有数据包指示给我的协议时,我就停不了应用程序了.最后在我用CloseHandle()关闭适配器的时候就不能继续往下执行,这个I/O请求都不能发送到驱动,而且传递给CloseHandle()的适配器句柄是有效的.会不会是在ReceiveIndicate函数中一直收到指示而不能退出啊?十万火急中,请高人指点,再拜!!!
sky
cross_sky
驱动小牛
驱动小牛
  • 注册日期2004-06-17
  • 最后登录2012-09-07
  • 粉丝0
  • 关注0
  • 积分858分
  • 威望727点
  • 贡献值0点
  • 好评度77点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-07-20 21:07
怎么没人看到吗?
sky
zhaock
驱动太牛
驱动太牛
  • 注册日期2002-01-26
  • 最后登录2018-06-02
  • 粉丝3
  • 关注2
  • 积分73328分
  • 威望362317点
  • 贡献值1点
  • 好评度226点
  • 原创分0分
  • 专家分0分
  • 社区居民
地板#
发布于:2005-07-20 21:12
你给出的信息太少,很难分析.你采用的是xp ddk的ndisuio的例子吗?这个例子本身应该没有这个问题,你增加了什么内容,检查一下你新增的代码.
cross_sky
驱动小牛
驱动小牛
  • 注册日期2004-06-17
  • 最后登录2012-09-07
  • 粉丝0
  • 关注0
  • 积分858分
  • 威望727点
  • 贡献值0点
  • 好评度77点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2005-07-20 21:48
下面是引用zhaock于2005-07-20 21:12发表的:
你给出的信息太少,很难分析.你采用的是xp ddk的ndisuio的例子吗?这个例子本身应该没有这个问题,你增加了什么内容,检查一下你新增的代码.

我自己申请了两块内存,缓冲区描述符就指向这两块内存,我现在只在驱动中收包,不记盘,只计数,但一旦为我打开网卡,开始接收NIC指示的包的时候,我的测试应用程序就不能退出,需要重启系统才能重新开始
sky
zhaock
驱动太牛
驱动太牛
  • 注册日期2002-01-26
  • 最后登录2018-06-02
  • 粉丝3
  • 关注2
  • 积分73328分
  • 威望362317点
  • 贡献值1点
  • 好评度226点
  • 原创分0分
  • 专家分0分
  • 社区居民
5楼#
发布于:2005-07-20 23:28
重点检查一下,你的测试程序和驱动通讯的代码,CreateFile,ReadFile,DeviceIoControl.从你说的现象看,一般是CreateFile打开的FileHandle有多个线程在使用,一个线程关闭的时候要等待另外的线程释放掉所独占的FileObject, 而那个线程一直不释放,导致这个线程被一直挂起.
cross_sky
驱动小牛
驱动小牛
  • 注册日期2004-06-17
  • 最后登录2012-09-07
  • 粉丝0
  • 关注0
  • 积分858分
  • 威望727点
  • 贡献值0点
  • 好评度77点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2005-07-21 18:14
谢谢,那个NDISuio的例子我能在2000DDK下build,但总是装不上,是不是它只能在XP下才能装啊?
sky
zhaock
驱动太牛
驱动太牛
  • 注册日期2002-01-26
  • 最后登录2018-06-02
  • 粉丝3
  • 关注2
  • 积分73328分
  • 威望362317点
  • 贡献值1点
  • 好评度226点
  • 原创分0分
  • 专家分0分
  • 社区居民
7楼#
发布于:2005-07-21 18:32
装不上,是什么现象?是不是编译的时候-DNDIS51=1被定义了,win2k好象只支持到ndis 5.0,把这个宏去掉试试
cross_sky
驱动小牛
驱动小牛
  • 注册日期2004-06-17
  • 最后登录2012-09-07
  • 粉丝0
  • 关注0
  • 积分858分
  • 威望727点
  • 贡献值0点
  • 好评度77点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2005-07-21 18:50
下面是引用zhaock于2005-07-21 18:32发表的:
装不上,是什么现象?是不是编译的时候-DNDIS51=1被定义了,win2k好象只支持到ndis 5.0,把这个宏去掉试试

我已经去掉了,不去掉都不能build,是添加协议时过程都正常,但最后协议里面没有,不知道怎么回事
sky
游客

返回顶部