LinX
驱动牛犊
驱动牛犊
  • 注册日期2002-08-19
  • 最后登录2007-07-05
  • 粉丝0
  • 关注0
  • 积分100分
  • 威望10点
  • 贡献值0点
  • 好评度10点
  • 原创分0分
  • 专家分0分
阅读:1701回复:4

关于NdisTransferData的问题

楼主#
更多 发布于:2002-08-20 20:12
大家好:

   请教一个问题, 本人在Windows 2000下面, 写类似PASSTHRU程序时遇到如下问题:
在ProtocolReceiveHandler函数中, 当我用NdisTransferData去拿LookAheadBuffer后面的数据时, 我重新分配了NDIS_PACKET和NDIS_BUFFER, 调用NdisTransferData之后, 正确地拿到数据,此时, 我再把NDIS_PACKET中的数据用NdisMoveMappedMemory拷贝到NDIS_LOOKAHEAD_PACKET后面, 当然也把NDIS_LOOKAHEAD_PACKET数据的长度作了调整. 再就是用NdisMIndicateReceivePacket把NDIS_LOOKAHEAD_PACKET转送给上层. 我可以Ping到其它的计算机, 但连接Internet时, 则在中文网站会出现乱码. 另外, 我还发现, 如果PacketSize等于LookAheadBufferSize时, 也即不调用NdisTransferData, 则一切正常! 因此, 问题出现在拿LookAheadBuffer后面的数据中. 请问, 在调用NdisTransferData应该注意那些事项? 另外, 在分配NDIS_PACKET时那些XXXReserved Field应该怎样初始化? 那位高手能否给出这段的Sample code. 谢谢!
  

[编辑 -  8/20/02 by  LinX]
wlrwx
驱动小牛
驱动小牛
  • 注册日期2002-04-05
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分11分
  • 威望11点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-08-21 09:34
NdisTransferData函数返回的状太中,可能是ndis_status_pending,则说明这个请求被异步处理了,在这个时候,当NDIS传输完数据以后会调用你的的协议的TRANSCOMPLETE函数,这个时候才能认为NDIS为你COPY了完整数据。。。。
我猜想是否是因为你没有检查这个函数的返回值就认为传输完毕了,所以出现乱码???

LookaheadBufferSize == packetsize的时候说明你拿到的数据就是全部的包,不经过这个过程,当然不会有错了,


个人看法,参考参考:)
真正的浪子―――― 是掠过城市的微风,每个人都能感到他的清新,可没有人能留住...... 亦是划过天际的流星,所有人都能仰望他夺目的光芒,没有人能触及...... 风止于森林,流星损于黄土......非凡浪子归于他的最爱......
LinX
驱动牛犊
驱动牛犊
  • 注册日期2002-08-19
  • 最后登录2007-07-05
  • 粉丝0
  • 关注0
  • 积分100分
  • 威望10点
  • 贡献值0点
  • 好评度10点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-08-21 09:52
当然检查了返回状态. 我说的是在浏览中文网站时, 则会出现乱码!
另外说一下, 我在NT下正常, 在2K中会出现问题.
moqingsong
论坛版主
论坛版主
  • 注册日期2002-04-07
  • 最后登录2011-02-03
  • 粉丝0
  • 关注0
  • 积分74分
  • 威望71点
  • 贡献值0点
  • 好评度10点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-08-21 10:02
当然检查了返回状态. 我说的是在浏览中文网站时, 则会出现乱码!
另外说一下, 我在NT下正常, 在2K中会出现问题.

你的nt,2000下应该用的不是同一套代码吧?
按第一贴的“给分”键,给分。
LinX
驱动牛犊
驱动牛犊
  • 注册日期2002-08-19
  • 最后登录2007-07-05
  • 粉丝0
  • 关注0
  • 积分100分
  • 威望10点
  • 贡献值0点
  • 好评度10点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-08-21 10:15
NdisTransferData这段Code是一样的.
游客

返回顶部