yelusiku
驱动牛犊
驱动牛犊
  • 注册日期2007-07-18
  • 最后登录2010-12-23
  • 粉丝0
  • 关注0
  • 积分51分
  • 威望87点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
阅读:1656回复:2

[求助]在中间层自己组包发送后PtSendComplete中该如何处理?

楼主#
更多 发布于:2008-06-12 12:38
如题,我想在中间层实现自己组包发包,参考了网上的一篇文章:
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
    );

难道上面代码中的指针是包含在调用该函数时提供的参数中的吗?
请知道的朋友一定不吝指教我下。谢谢。
时常感到精力不够。。。
uuuty
驱动牛犊
驱动牛犊
  • 注册日期2005-02-04
  • 最后登录2010-09-15
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望25点
  • 贡献值0点
  • 好评度11点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2008-06-12 16:00
VOID
  NdisUnchainBufferAtFront(
    IN OUT PNDIS_PACKET  Packet,
    OUT PNDIS_BUFFER  *Buffer
    );
pMySendPacketBuffer这个是得到的, 得到PNDIS_BUFFER后再查询出对应的buffer, 释放掉后再释放pMySendPacketBuffer, 最后释放packet

你说的这几个东西都是通过Packet得到的
yelusiku
驱动牛犊
驱动牛犊
  • 注册日期2007-07-18
  • 最后登录2010-12-23
  • 粉丝0
  • 关注0
  • 积分51分
  • 威望87点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2008-06-12 22:43
谢谢1楼的兄弟了。可能是我看的不仔细,我再研究研究。
时常感到精力不够。。。
游客

返回顶部