wnl0008
驱动牛犊
驱动牛犊
  • 注册日期2007-06-10
  • 最后登录2016-01-09
  • 粉丝1
  • 关注0
  • 积分2分
  • 威望33点
  • 贡献值0点
  • 好评度31点
  • 原创分0分
  • 专家分0分
阅读:1233回复:3

请教一个发送数据包的问题,谢谢!

楼主#
更多 发布于:2007-09-13 10:27
在串行化微端口驱动中,当发送数据包返回NDIS_STATUS_PENDING后,我们什么时候再次发送这个数据包呢,是系统自己实现还是驱动开发者实现?我们是否需要在发送完当前数据包后检查等待发送队列是否为空,如果不为空则继续发送,并用NdisMSendComplete指示发送完成?
Chequer Jiang
驱动牛犊
驱动牛犊
  • 注册日期2007-09-13
  • 最后登录2007-12-17
  • 粉丝1
  • 关注0
  • 积分290分
  • 威望30点
  • 贡献值0点
  • 好评度29点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-09-14 09:46
对于一个serialized miniport driver来说,如果你在MiniportSend发送数据包是有任何问题,你可以返回NDIS_STATUS_RESOURCES来通知 NDIS说,你没办法发送这个数据包。下一次NDIS给你的是同一个数据包。每当你发完一个数据包后,你可以呼叫NdisMSendResourcesAvailable来通知NDIS,你可以接着发送其他数据包了。或者用NdisMSendComplete也可以达到同样的目的。究竟用哪一个,依赖于你的driver结构。
wnl0008
驱动牛犊
驱动牛犊
  • 注册日期2007-06-10
  • 最后登录2016-01-09
  • 粉丝1
  • 关注0
  • 积分2分
  • 威望33点
  • 贡献值0点
  • 好评度31点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-09-14 11:05
非常感谢!
我还想再请教一个问题,就是在延迟过程调用中,我们怎么样分配内存呢?问题是这样的,我希望从外设的扩展存储器中读取数据包到内存中一块缓冲区,我用NdisAllocateMemoryWithTag分配内存后,系统提示调用级别不够,直接用分配一个1500字节的数据系统又提示缺页,我都不知道怎么办好了。我刚接触驱动开发不久,所以还希望前辈们指教!
Chequer Jiang
驱动牛犊
驱动牛犊
  • 注册日期2007-09-13
  • 最后登录2007-12-17
  • 粉丝1
  • 关注0
  • 积分290分
  • 威望30点
  • 贡献值0点
  • 好评度29点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-09-17 10:01
Do you sure that the caller of NdisAllocateMemoryWithTag in DPC routine? As DDK said, it can be called in DISPATCH_LEVEL. You can check IRQL using KeGetCurrentIrql.
游客

返回顶部