阅读:1115回复:1
关于包描述符的问题!!!那位大吓能帮帮我呢??
我在PtReceive中对我得到的包进行了修改,然后想吧这个数据包发送出去,我使用了下面设置包的过程,可是总是不正确!!不知道为什么????
PUCHAR pPacketContent; ............ ............ SendTempPacket=(PNDIS_PACKET)pPacketContent; // 在包池中分配包描述符 NdisDprAllocatePacket(&Status, &SendPacket, pAdapt->RecvPacketPoolHandle); if (Status == NDIS_STATUS_SUCCESS) { // 在缓冲池中分配缓冲描述符,将包描述符与缓冲描述符关联。 NdisAllocateBuffer(&Status, &pPacketBuffer, pAdapt->RecvBufferPoolHandle, pPacketContent, PacketLen); NdisChainBufferAtFront(SendPacket, pPacketBuffer); Rsvd = (PRSVD)(SendPacket->ProtocolReserved); Rsvd->OriginalPkt = SendTempPacket; SendPacket->Private.Head->Next =NULL;//把buffer的链接下一个指针置0,即设置发送链表只有一个buffer元素 SendPacket->Private.Tail =NULL;//把Tail指针也置0 Rsvd = (PRSVD)(SendPacket->ProtocolReserved); Rsvd->OriginalPkt = SendTempPacket; SendPacket->Private.Flags = SendTempPacket->Private.Flags; SendPacket->Private.Head = SendTempPacket->Private.Head; SendPacket->Private.Tail = SendTempPacket->Private.Tail; NdisSetPacketFlags(SendPacket, NDIS_FLAGS_DONT_LOOPBACK);//设置Flags NdisMoveMemory(NDIS_OOB_DATA_FROM_PACKET(SendPacket),NDIS_OOB_DATA_FROM_PACKET(SendTempPacket),sizeof(NDIS_PACKET_OOB_DATA)); NdisIMCopySendPerPacketInfo(SendPacket, SendTempPacket); NDIS_GET_PACKET_MEDIA_SPECIFIC_INFO(SendTempPacket, &MediaSpecificInfo, &MediaSpecificSize); if_need_free=1; //标志置1,已经分配了内存,需要释放 NdisSend(&Status,pAdapt->BindingHandle,SendPacket); if (Status!=NDIS_STATUS_PENDING) { DbgPrint("Status!=NDIS_STATUS_PENDING"); if (if_need_free==1) { NdisUnchainBufferAtFront(SendPacket,&pPacketBuffer); NdisQueryBufferSafe(pPacketBuffer,&virtualaddress,&virtuallength,32); NdisFreeBuffer(pPacketBuffer); if_need_free=2; } NdisIMCopySendCompletePerPacketInfo(SendTempPacket,SendPacket); NdisFreePacket(SendPacket); } } [编辑 - 11/19/04 by zgc7622] |
|
沙发#
发布于:2004-11-26 16:34
请问,你是在tdi还是在 intermediate
?? |
|
|