阅读:1448回复:9
PRSVD的作用?
下面是斑竹以前发的帖子里,我对里面的“Resvd =(PRSVD)(MyPacket->MiniportReserved);Resvd->OriginalPkt = NULL;”代码的意思不了解,希望大虾指点一下!
{ 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 ); RtlCopyMemory(pPacketContent,HeaderBuffer,HeaderBufferSize); RtlCopyMemory(pPacketContent+HeaderBufferSize,LookAheadBuffer,LookAheadBufferSize); PacketLen = PacketSize+HeaderBufferSize; // DbgPrint(\"Packet Size=%d\\n\",PacketLen); result = RecvProcess( pAdapt,pPacketContent,&PacketLen); if( result == PACKET_REFUSE ) { DbgPrint(\"ptreceive :packet_refuse\\n\"); NdisFreeMemory(pPacketContent,2000,0); return NDIS_STATUS_NOT_ACCEPTED; } NdisDprAllocatePacket(&Status, &MyPacket, pAdapt->RecvPacketPoolHandle); if(Status == NDIS_STATUS_SUCCESS) { NdisAllocateBuffer(&Status,&PacketBuffer,pAdapt->RecvBufferPoolHandle,pPacketContent,PacketLen); NdisChainBufferAtFront( MyPacket, PacketBuffer ); MyPacket->Private.Head->Next=NULL; MyPacket->Private.Tail=NULL; Resvd =(PRSVD)(MyPacket->MiniportReserved); Resvd->OriginalPkt = NULL; NDIS_SET_PACKET_HEADER_SIZE( MyPacket, HeaderBufferSize ); NdisMIndicateReceivePacket(pAdapt->MiniportHandle, &MyPacket, 1); // 这个函数调用之后ndis就只能调用protocol的ptrecievepacket了。 if ( NDIS_GET_PACKET_STATUS( MyPacket ) != NDIS_STATUS_PENDING ) { NdisFreeBuffer(PacketBuffer); NdisFreeMemory(pPacketContent,2000,0); NdisDprFreePacket(MyPacket); } break; } |
|
沙发#
发布于:2003-10-14 21:34
怎么浏览后直接发表文章,问题分数为0分?一定要退回去才能有分数吗?
|
|
板凳#
发布于:2003-10-15 15:20
在\"ndis.h\"头文件里有
|
|
地板#
发布于:2003-10-19 15:47
我装的是Win2k DDK,在目录D:\\NTDDK\\inc\\ddk下
自己直接搜索ndis.h就可以找到了 |
|