snowstone
驱动牛犊
驱动牛犊
  • 注册日期2002-03-15
  • 最后登录2005-09-08
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1652回复:8

我在自己创建的系统线程中调用NdisSend来发数据包,为什么不成功

楼主#
更多 发布于:2002-11-19 16:10
我在自己创建的系统线程中调用NdisSend来发数据包,为什么不成功?
包都分配好了
paoyipao
驱动牛犊
驱动牛犊
  • 注册日期2002-11-18
  • 最后登录2003-06-05
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-11-19 16:16
能说详细点吗?
知之为知之,不知为不知 有错则改之
fracker
驱动太牛
驱动太牛
  • 注册日期2001-06-28
  • 最后登录2021-03-30
  • 粉丝0
  • 关注0
  • 积分219分
  • 威望81点
  • 贡献值0点
  • 好评度23点
  • 原创分0分
  • 专家分1分
  • 社区居民
板凳#
发布于:2002-11-19 19:11
什么平台啊?
snowstone
驱动牛犊
驱动牛犊
  • 注册日期2002-03-15
  • 最后登录2005-09-08
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于: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。
mikeluo
驱动老牛
驱动老牛
  • 注册日期2001-09-04
  • 最后登录2007-05-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-11-20 09:19
返回pending是说ndis留着自己在处理,等发送完了会调用sendcomplete告诉你
学而不思则罔,思而不学则殆 学而思之,思而学之,岂非圣人乎?
Buddha
驱动老牛
驱动老牛
  • 注册日期2001-04-29
  • 最后登录2013-05-18
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望17点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-11-20 11:01
看PACKET里面的发送吧,WIRTE.C,已经很详细了
<table style="filter: glow(color=sky blue, strength=10)"> <font color=white> 猫生病了, 老鼠大声朗诵诗集, 并修剪盆花. 猫生病了, 老鼠慢慢刷牙洗脸, 并打扫房间. 猫生病了, 老鼠倚在窗边欣赏夜色, 并对流星许愿. 猫生病了, 老鼠也病了, 它说:"我还是习惯那种时时紧张, 处处小心, 夜夜逃亡的生活." 午夜, 我听到老鼠在叹息, 且不再读诗了. </font></table>
nicol
驱动大牛
驱动大牛
  • 注册日期2001-11-28
  • 最后登录2009-07-30
  • 粉丝0
  • 关注0
  • 积分45分
  • 威望5点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-11-20 11:45
。准备数据
。if (Send() != NDIS_PENDING)
             //释放数据缓冲。

//这个时候发送就结束了。等Miniport发送完毕。NDIS会调用你开始注册的SendComplete。
在这个函数中你再释放缓冲就行了。


这是个异步的过程。不是同步的。
==寂寞骆驼==
leepyzh
禁止发言
禁止发言
  • 注册日期2001-04-27
  • 最后登录2018-05-30
  • 粉丝0
  • 关注0
  • 积分3668分
  • 威望18340点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
7楼#
发布于:2002-11-20 21:58
用户被禁言,该主题自动屏蔽!
mikeluo
驱动老牛
驱动老牛
  • 注册日期2001-09-04
  • 最后登录2007-05-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2002-11-21 09:35
你是协议层还是中间层?
学而不思则罔,思而不学则殆 学而思之,思而学之,岂非圣人乎?
游客

返回顶部