lixiangying
驱动牛犊
驱动牛犊
  • 注册日期2002-05-03
  • 最后登录2007-09-09
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
阅读:1572回复:4

passthru中PtSendComplete问题

楼主#
更多 发布于:2003-11-22 20:49
看了ptreceive中间转发的不少帖子,关于ndissend返回pending 时的资源释放,依然有问题。今天已经重装3次机子了。下面是框架:
PtSendComplete(
    IN  NDIS_HANDLE            ProtocolBindingContext,
    IN  PNDIS_PACKET           Packet,
    IN  NDIS_STATUS            Status
    )
{

     PADAPT            pAdapt = (PADAPT)ProtocolBindingContext;
     PNDIS_PACKET      Pkt;
     NDIS_HANDLE       PoolHandle;
     PNDIS_BUFFER pNdisBuffer;
     PUCHAR pPacketContent;
     UINT BufferLen;

     if (need_free)
{

      
           NdisUnchainBufferAtFront(Packet,&pNdisBuffer);

           NdisQueryBufferSafe(pNdisBuffer,&pPacketContent,&BufferLen,32);

           NdisFreeBuffer(pNdisBuffer);

           NdisFreeMemory(pPacketContent,BUFFER_SIZE,0);

           NdisDprFreePacket(Packet);
           need_free=0;


}

     else
       {
  
            原函数内处理代码;


       }
}

ptreceive内的组包应该没有问题,
请高手指教以下吧,快疯了。要分就拿。

最新喜欢:

xiaojian521xiaoji...
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2003-11-23 11:45
need_free是全局的?不正确。

为什么不用passthru的方法?利用ProtocolReserved。

原本是用ProtocolReserved来保存一个
typedef struct _ProtRsvd
{
PNDIS_PACKET OriginalPkt;
} RSVD, *PRSVD;
,这里OriginalPkt是原来的packet,你可以将之改改,比如
typedef struct _ProtRsvd
{
PNDIS_PACKET OriginalPkt;
           PNIDS_BUFFER         pMyBuffer;
           PUCHAR               pMyContent;
} RSVD, *PRSVD;
注意的是ProtocolReserved有16byte,就是说,可以放4个pointer的。

然后你在send自己的packet的时候,将OriginalPkt = NULL,因为没有原来的packet,自己分配的buffer和memory保存起来。在complete要判断OriginalPkt是否为NULL,pMyContent和pMyBuffer也判断是安全之道。

不过这样的话,你在其它用到RSVD的地方也要改了,将pMyBuffer和pMyContent = NULL。
lixiangying
驱动牛犊
驱动牛犊
  • 注册日期2002-05-03
  • 最后登录2007-09-09
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-11-23 13:07
非常感谢指点,我再试试。
lixiangying
驱动牛犊
驱动牛犊
  • 注册日期2002-05-03
  • 最后登录2007-09-09
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-11-29 13:07
凑效,接分。
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
地下室#
发布于:2003-11-30 12:45
有说的错误的地方,就是ProtocolReserved不一定是16bytes,在分配packet pool handle的时候可以指定的。

NIC drivers and intermediate drivers allocate packet descriptors with, at least, 16 bytes of ProtocolReserved space to be used by protocols for receive indications.

For packet descriptors to be used in receive indications, this parameter can be at most 16 (bytes).
游客

返回顶部