daweia
驱动牛犊
驱动牛犊
  • 注册日期2003-11-26
  • 最后登录2007-12-15
  • 粉丝0
  • 关注0
  • 积分36分
  • 威望7点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1538回复:5

PtReceive处理流程(旧案新解,今日做个了断)

楼主#
更多 发布于:2003-12-01 20:56
  到这边没几天,今天刚用了搜索,查到我所关注的PtReceive函数处理的几片文章,其中去年3月HuYuguang斑竹(现在还是吧)回答ysy网友的一片帖子(http://www.driverdevelop.com/forum/viewthread.php?tid=8559#pid34492)讲的最为深入。但最后ysy借用斑竹的源码仍然没有调通,我最近也在搞这个东西,看了这篇贴子测试后也还有一些问题不明白。请各位老大不吝援手。
  斑竹的源码里我最关注最后一种情况,就是packetsize》lookaheadbuffersize时的处理,下面是斑竹的源码
2、
需要调用transferdata的。
Status = NdisAllocateMemory(
&pPacketContent,
2000,
0,
HighestAcceptableAddress);

if (Status != NDIS_STATUS_SUCCESS )
{
DbgPrint(\"ptreceive :ndisallocatememory failed\\n\");
return NDIS_STATUS_NOT_ACCEPTED ;
}

if(pPacketContent == NULL)
{
DbgPrint(\"prreceive:pPacketContent == NULL\\n\");
return NDIS_STATUS_NOT_ACCEPTED ;
}

RtlZeroMemory(pPacketContent, 2000 );
NdisDprAllocatePacket(&Status,
&MyPacket,
pAdapt->RecvPacketPoolHandle);


NdisAllocateMemory(
&pBakBuffer,
2000,
0,
HighestAcceptableAddress);
if(Status != NDIS_STATUS_SUCCESS)
{
DbgPrint(\"ptreceive:allcate bak buffer failed\\n\");
return NDIS_STATUS_NOT_ACCEPTED;
}

NdisMoveMemory(pBakBuffer,HeaderBuffer,HeaderBufferSize);
NdisMoveMemory(pBakBuffer+HeaderBufferSize,LookAheadBuffer,LookAheadBufferSize);
PacketLen = HeaderBufferSize + PacketSize;
NdisAllocateBuffer(&Status,&PacketBuffer,pAdapt->RecvBufferPoolHandle,pPacketContent,PacketSize-LookAheadBufferSize);
NdisChainBufferAtFront( MyPacket, PacketBuffer );
MyPacket->Private.Head->Next=NULL;
MyPacket->Private.Tail=NULL;

OffsetSize = HeaderBufferSize + LookAheadBufferSize;

NdisDprAllocatePacket(&Status,
&MyPacket2,
pAdapt->RecvPacketPoolHandle);
NdisAllocateBuffer(&Status,&OffsetBuffer,pAdapt->RecvBufferPoolHandle ,pBakBuffer,OffsetSize);
NdisChainBufferAtFront(MyPacket2,OffsetBuffer);

Resvd =(PRSVD)(MyPacket->MiniportReserved);
Resvd->OriginalPkt = (PNDIS_PACKET)MyPacket2;

NDIS_SET_PACKET_HEADER_SIZE( MyPacket, HeaderBufferSize );

NdisTransferData(&Status,
pAdapt->BindingHandle ,
MacReceiveContext,
LookAheadBufferSize,
PacketSize-LookAheadBufferSize ,
MyPacket,
&BytesTransferred);

if ( Status != NDIS_STATUS_PENDING )
{

PtTransferDataComplete( (NDIS_HANDLE)pAdapt, MyPacket, Status, BytesTransferred );
}


这里我理解是构造一个packet用transfer函数发出,但有几个问题
1:NdisAllocateBuffer(&Status,&OffsetBuffer,pAdapt->RecvBufferPoolHandle ,pBakBuffer,OffsetSize);
我编译时不通过原因是说passthru.h里没有RecvBufferPoolHandle成员函数,是否因为ndis版本问题?如何安装高版本?
2:PtTransferDataComplete应该是transfer后的善后处理,可不可以直接把处理过程放在PtReceive里?
3:原passthru是do循环处理数据的,按现在的修改是否一次后直接跳出,还是继续循环
4:PtReceive这些函数是谁调用的?MP※※※呢?

最新喜欢:

ljmmaryljmmar...
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2003-12-01 21:27
1、自己在PtBindingAdapt的时候用NdisAllocateBufferPool分配一个poolhandle。
2、当status != PENDING的时候,就可以,Hu版就是这样的。否则你可以当此请求正处理中,这时候当然不能PtTransferDataComplete。等处理完了会“自动”调用你的PtTransferDataComplete的。
3、什么do?是说do {...}while(FALSE)吗?注意是个FASLE,就是说只执行一次。这样,发现错误了(如分配buffer失败等),可以直接用break跳到错误处理。
4、NDIS

最后,建议多看看DDK network drivers的内容。
daweia
驱动牛犊
驱动牛犊
  • 注册日期2003-11-26
  • 最后登录2007-12-15
  • 粉丝0
  • 关注0
  • 积分36分
  • 威望7点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-12-01 22:29
1。分配以后怎样在PtPreceive中引用呢,直接分配不行吗

还有VOID
  NdisAllocateBufferPool(
    OUT PNDIS_STATUS  Status,
    OUT PNDIS_HANDLE  PoolHandle,
    IN UINT  NumberOfDescriptors//这个参数是干什么的
    );
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
地板#
发布于:2003-12-02 11:04
看DDK关于NdisAllocateBufferPool、NdisAllocateBuffer的说明呀,就能知道了。
别人告诉你的没有自己看来的记的牢。
daweia
驱动牛犊
驱动牛犊
  • 注册日期2003-11-26
  • 最后登录2007-12-15
  • 粉丝0
  • 关注0
  • 积分36分
  • 威望7点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-12-02 16:07
我装的ddk怎么好像没有帮助文档
right_wind
驱动中牛
驱动中牛
  • 注册日期2001-10-12
  • 最后登录2018-05-29
  • 粉丝1
  • 关注0
  • 积分60分
  • 威望66点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
  • 社区居民
5楼#
发布于:2003-12-03 21:57
我装的ddk怎么好像没有帮助文档

重装DDK,在装的时候选择装帮助文件就行了。

good good study, day day up。
游客

返回顶部