lucy_huiminz
驱动小牛
驱动小牛
  • 注册日期2002-06-18
  • 最后登录2009-02-11
  • 粉丝0
  • 关注0
  • 积分30分
  • 威望6点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
阅读:1301回复:7

各位大侠请帮忙!关于在自定义函数中发自定义包的问题,30分酬谢!!

楼主#
更多 发布于:2003-07-18 10:22
我在驱动程序中开了一个定时器,定时发送自定义的包,
我直接调用NdisMIndicateReceivePacket函数仿真网卡的动作,可是第一个参数
IN NDIS_HANDLE  MiniportAdapterHandle该从哪里得到啊?
    
antspower
驱动中牛
驱动中牛
  • 注册日期2002-10-17
  • 最后登录2010-08-03
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值2点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-07-18 13:22
从全局ADAPT里来
放弃瘟草,现吃李草
lucy_huiminz
驱动小牛
驱动小牛
  • 注册日期2002-06-18
  • 最后登录2009-02-11
  • 粉丝0
  • 关注0
  • 积分30分
  • 威望6点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-07-18 13:48
我现在就是这样做的,全局的adapt是从MPInitialize里得到的,可我执行下面一段程序会死机:
if((Seconds-LiveSeconds)>20)//如果>20秒
{
NdisDprAllocatePacket(&Status, &MyPacket, MyAdapt->RecvPacketPoolHandle);
if(Status == NDIS_STATUS_SUCCESS)
{
   NdisAllocateBuffer(&Status, &pPacketBuffer, MyAdapt->RecvBufferPoolHandle, m_BufferSystemVirtualAddress, 54);
if(Status == NDIS_STATUS_SUCCESS)
{
   NdisChainBufferAtFront(MyPacket, pPacketBuffer);
   MyPacket->Private.Head->Next = NULL;
   MyPacket->Private.Tail = NULL;
   Rsvd=(PRSVD)(MyPacket->MiniportReserved);
   Rsvd->OriginalPkt = NULL;
   NDIS_SET_PACKET_HEADER_SIZE(MyPacket, 14);
   NdisMIndicateReceivePacket(MyAdapt->MiniportHandle, &MyPacket, 1);
   NdisFreeBuffer(pPacketBuffer);
   NdisDprFreePacket(MyPacket);
}
}

还有,如果执行NdisMIndicateReceivePacket函数时,返回的Status==NDIS_STATUS_PENDING时,那么程序分配的packet和buffer在哪里释放呢?
antspower
驱动中牛
驱动中牛
  • 注册日期2002-10-17
  • 最后登录2010-08-03
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值2点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-07-18 15:22
MPRETURNPACKET中
看样子哥们是定时向自己的机器提交ARP的包
建议你将包的长度改为60,将多余的6个字节用0X20补上
放弃瘟草,现吃李草
antspower
驱动中牛
驱动中牛
  • 注册日期2002-10-17
  • 最后登录2010-08-03
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值2点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-07-18 15:29
其实处理的流程是:
当你NdisMIndicateReceivePacket,NDIS调用PROTOCOLRECEIVEPACKET函数把包传了TCPIP.SYS,SYS得到包的数据后,告诉底层\"包我已经拿到了,你们把资源释放吧\",告诉底层的这个函数就是MPRETURNPACKET
放弃瘟草,现吃李草
lucy_huiminz
驱动小牛
驱动小牛
  • 注册日期2002-06-18
  • 最后登录2009-02-11
  • 粉丝0
  • 关注0
  • 积分30分
  • 威望6点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-07-18 16:06
antspower:
我不太明白你两个回帖的意思,
1、“MPRETURNPACKET中”是指的释放包资源的函数?
2、不是定时发arp的包,是发rst包,自己组建的包,一定要补齐60
   字节么?
3、我刚才又作试验,上面的代码一运行到
   NdisMIndicateReceivePacket就死机,\"从MPInitialize里得到全
   局的adapt\",我的思路是对的吧?
 :o
antspower
驱动中牛
驱动中牛
  • 注册日期2002-10-17
  • 最后登录2010-08-03
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值2点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-07-18 17:03
1。你申请的所有资源应该在MPRETURNPAKCET中释放。
2。可能不要,但是我觉得加上没错吧,因为无论是什么到,只要是通过INTERNET到你的机器上,他就不可能少于60个字节。
所以我觉得如果你把数据交给上层的时候,最好是让他和网络上的一个样。
对了你的那个定时器调用NDISMINDICATEPACKET是在哪个函数中调用的?
你是参考的PASSTHRU吗?
如果是你可以用哪个ADAPT的全局链得到你要的ADAPT
放弃瘟草,现吃李草
Turbo
驱动牛犊
驱动牛犊
  • 注册日期2002-02-05
  • 最后登录2009-01-12
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-07-18 17:22
用softice看一下死在哪,再来说
游客

返回顶部