阅读:1233回复:3
请教一个发送数据包的问题,谢谢!
在串行化微端口驱动中,当发送数据包返回NDIS_STATUS_PENDING后,我们什么时候再次发送这个数据包呢,是系统自己实现还是驱动开发者实现?我们是否需要在发送完当前数据包后检查等待发送队列是否为空,如果不为空则继续发送,并用NdisMSendComplete指示发送完成?
|
|
沙发#
发布于:2007-09-14 09:46
对于一个serialized miniport driver来说,如果你在MiniportSend发送数据包是有任何问题,你可以返回NDIS_STATUS_RESOURCES来通知 NDIS说,你没办法发送这个数据包。下一次NDIS给你的是同一个数据包。每当你发完一个数据包后,你可以呼叫NdisMSendResourcesAvailable来通知NDIS,你可以接着发送其他数据包了。或者用NdisMSendComplete也可以达到同样的目的。究竟用哪一个,依赖于你的driver结构。
|
|
板凳#
发布于:2007-09-14 11:05
非常感谢!
我还想再请教一个问题,就是在延迟过程调用中,我们怎么样分配内存呢?问题是这样的,我希望从外设的扩展存储器中读取数据包到内存中一块缓冲区,我用NdisAllocateMemoryWithTag分配内存后,系统提示调用级别不够,直接用分配一个1500字节的数据系统又提示缺页,我都不知道怎么办好了。我刚接触驱动开发不久,所以还希望前辈们指教! |
|
地板#
发布于: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.
|
|