阅读:1652回复:8
我在自己创建的系统线程中调用NdisSend来发数据包,为什么不成功
我在自己创建的系统线程中调用NdisSend来发数据包,为什么不成功?
包都分配好了 |
|
沙发#
发布于:2002-11-19 16:16
能说详细点吗?
|
|
|
板凳#
发布于:2002-11-19 19:11
什么平台啊?
|
|
地板#
发布于:2002-11-20 09:13
//Win2000
SelefIoctrlThread(PVOID par) { case IOCTRL_SEND_DATA: ... //对pSendPacketContext进行填充处理 ... NdisAllocateBuffer(&reqStatus,&pSendPacketBuffer,pReqAdapt->ZxSendBufferHandle,pSendPacketContext,uPacketLen); ASSERT(reqStatus == NDIS_STATUS_SUCCESS); NdisDprAllocatePacket(&reqStatus,&pSendPacket,pReqAdapt->ZxSendPakcetHandle); ASSERT(reqStatus == NDIS_STATUS_SUCCESS); NdisChainBufferAtFront(pSendPacket,pSendPacketBuffer); pSendPacket->Private.Head->Next = NULL; pSendPacket->Private.Tail = NULL; ((PRSVD)pSendPacket->MiniportReserved)->OriginalPkt = NULL; NDIS_SET_PACKET_HEADER_SIZE(pSendPacket,14); NdisSetPacketFlags(pSendPacket, NDIS_FLAGS_DONT_LOOPBACK) ; NdisSend(&reqStatus,pReqAdapt->BindingHandle,pSendPacket); if(reqStatus != NDIS_STATUS_PENDING) { //clean up buffer } ... } 返回的也是NDIS_STATUS_PENDING,但是接着就OVER。 |
|
地下室#
发布于:2002-11-20 09:19
返回pending是说ndis留着自己在处理,等发送完了会调用sendcomplete告诉你
|
|
|
5楼#
发布于:2002-11-20 11:01
看PACKET里面的发送吧,WIRTE.C,已经很详细了
|
|
|
6楼#
发布于:2002-11-20 11:45
。准备数据
。if (Send() != NDIS_PENDING) //释放数据缓冲。 //这个时候发送就结束了。等Miniport发送完毕。NDIS会调用你开始注册的SendComplete。 在这个函数中你再释放缓冲就行了。 这是个异步的过程。不是同步的。 |
|
|
7楼#
发布于:2002-11-20 21:58
用户被禁言,该主题自动屏蔽! |
|
8楼#
发布于:2002-11-21 09:35
你是协议层还是中间层?
|
|
|