wangzai
驱动牛犊
驱动牛犊
  • 注册日期2002-03-08
  • 最后登录2015-12-21
  • 粉丝2
  • 关注0
  • 积分139分
  • 威望252点
  • 贡献值0点
  • 好评度12点
  • 原创分0分
  • 专家分0分
阅读:2387回复:6

高手看过来 ――关于一段passthru发自定义包的程序!

楼主#
更多 发布于:2002-04-22 10:24
    下面是一段在passthru中向外发送自定义数据包的程序,不知道搞错了什么地方,一运行到它就重启!!
  请问大侠,这段程序错在什么地方,该怎么改??

//定义变量
 NDIS_HANDLE         PoolHandle;
 NDIS_HANDLE         BufPoolHandle;
 PNDIS_BUFFER         pNdisBuffer;
 UINT                PacketLeng;
 PNDIS_PACKET        MyPacket;
 NDIS_STATUS         Status = NDIS_STATUS_SUCCESS;
 static UCHAR        WritePacketData[45]={0xff,0xff,0xff,0xff,0xff,
                                         0xff,0x0,0x0,0x0,0x0,0x0,
                                         0x0,0x08,0x06 …………};  //Mac包的内容
 
 NdisAllocatePacketPool(&Status,&PoolHandle,2,100);  //申请包池
 if( NT_SUCCESS( Status ) )   {  DbgPrint(\"%s\",\"NDIS PacketPool allocate Successn\");  }

 else  {   DbgPrint(\"%s\",\"NDIS Packet allocatePool failuren\");
     return 0;     }

 NdisAllocateBufferPool(&Status,&BufPoolHandle,2); //申请Buffer池
 if( NT_SUCCESS( Status ) ) { DbgPrint(\"%s\",\"NDIS BufferPool allocate Successn\"); }
 else {    DbgPrint(\"%s\",\"NDIS Buffer allocatePool failuren\");
    return 0 ; }

 NdisDprAllocatePacket(&Status,  &MyPacket, &PoolHandle);  //申请包

 NdisAllocateBuffer(&Status,&pNdisBuffer,BufPoolHandle,WritePacketData,45); //申请包空间
 NdisChainBufferAtFront(MyPacket, pNdisBuffer); //把包内容链到包里面
 pNdisBuffer->Next = NULL;
 MyPacket->Private.Tail = NULL;

 NDIS_SET_PACKET_HEADER_SIZE(MyPacket,45);
 NDIS_SET_PACKET_STATUS(MyPacket,NDIS_STATUS_RESOURCES);

 NdisSend(&Status, pAdapt->BindingHandle, MyPacket);//把包发送出去

 Status=NDIS_GET_PACKET_STATUS(MyPacket); //检查是否成功
if(Status==NDIS_STATUS_SUCCESS)
 {
  DbgPrint(\"Status=%s\",\"NDIS_STATUS_SUCCESS\");

  }
 else if(Status==NDIS_STATUS_PENDING)
 {
 DbgPrint(\"Status=%s\",\"NDIS_STATUS_PENDING\");
 }


  请问大侠,这段程序错在什么地方,该怎么改??



[编辑 -  4/22/02 作者: wangzai]
sgren
驱动牛犊
驱动牛犊
  • 注册日期2001-12-04
  • 最后登录2004-10-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-04-22 11:47
pNdisBuffer->Next = NULL;
MyPacket->Private.Tail = NULL;
这两条语句不起作用,另外一般不要对NDIS_PACKET和NDIS_BUFFER的成员属性直接操作,而是通过相关的函数来实现。
wangzai
驱动牛犊
驱动牛犊
  • 注册日期2002-03-08
  • 最后登录2015-12-21
  • 粉丝2
  • 关注0
  • 积分139分
  • 威望252点
  • 贡献值0点
  • 好评度12点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-04-22 13:27
既然没作用,应该不是导致重启吧??
wirelessboy
驱动牛犊
驱动牛犊
  • 注册日期2002-04-21
  • 最后登录2003-12-17
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-04-22 14:48
提一点小建议:最好在每一个函数调用之后都检查一下返回的结果是否正确。
flytoni
驱动牛犊
驱动牛犊
  • 注册日期2002-04-22
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-04-22 17:28
re
Toni
wangzai
驱动牛犊
驱动牛犊
  • 注册日期2002-03-08
  • 最后登录2015-12-21
  • 粉丝2
  • 关注0
  • 积分139分
  • 威望252点
  • 贡献值0点
  • 好评度12点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-04-22 19:49
提一点小建议:最好在每一个函数调用之后都检查一下返回的结果是否正确。


我已经在里面加了很多DbgPrint语句了,我想根本还来不及看输出信息句被重起了!!
babizhu
驱动牛犊
驱动牛犊
  • 注册日期2002-01-29
  • 最后登录2003-08-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-04-23 09:47
那就设置断点,一步步调试阿
游客

返回顶部