阅读:1656回复:2
[求助]在中间层自己组包发送后PtSendComplete中该如何处理?
如题,我想在中间层实现自己组包发包,参考了网上的一篇文章:
http://www.shamuma.net/read.php/19.htm 文中提到使用自己的MySendPacket函数发包后,如果状态是pending的话, 需要在PtSendComplete函数中将自己的包释放掉,并且不通知上层。其代码为: if (!Pkt ) { NdisUnchainBufferAtFront(Packet, &pMySendPacketBuffer); if (pMySendPacketBuffer) { NdisQueryBufferSafe( pMySendPacketBuffer, (PVOID *)&pMySendBuffer, &dwMySendBufferLength, HighPagePriority ); if (pMySendBuffer && dwMySendBufferLength) { NdisFreeMemory(pMySendBuffer, dwMySendBufferLength, 0); } NdisFreeBuffer( pMySendPacketBuffer ); } NdisDprFreePacket(Packet); 我现在不清楚,代码中的 pMySendPacketBuffer、pMySendBuffer、dwMySendBufferLength等这些参数和指针是怎么传给PtSendComplete的? PtSendComplete的声明是: VOID PtSendComplete( IN NDIS_HANDLE ProtocolBindingContext, IN PNDIS_PACKET Packet, IN NDIS_STATUS Status ); 难道上面代码中的指针是包含在调用该函数时提供的参数中的吗? 请知道的朋友一定不吝指教我下。谢谢。 |
|
|
沙发#
发布于:2008-06-12 16:00
VOID
NdisUnchainBufferAtFront( IN OUT PNDIS_PACKET Packet, OUT PNDIS_BUFFER *Buffer ); pMySendPacketBuffer这个是得到的, 得到PNDIS_BUFFER后再查询出对应的buffer, 释放掉后再释放pMySendPacketBuffer, 最后释放packet 你说的这几个东西都是通过Packet得到的 |
|
板凳#
发布于:2008-06-12 22:43
谢谢1楼的兄弟了。可能是我看的不仔细,我再研究研究。
|
|
|