sweetzhf
驱动牛犊
驱动牛犊
  • 注册日期2005-01-08
  • 最后登录2005-01-24
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1577回复:5

版主啊!救命啊!要分给分100!PtReceivePacket中发TCP包,一NdisSend就蓝屏!!!!

楼主#
更多 发布于:2005-01-12 17:33
本问题基本解决!!

[编辑 -  1/14/05 by  sweetzhf]
AllenZh
驱动老牛
驱动老牛
  • 注册日期2001-08-19
  • 最后登录2015-11-27
  • 粉丝19
  • 关注10
  • 积分1316分
  • 威望2387点
  • 贡献值7点
  • 好评度321点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-01-12 19:47
这样看代码很难看出问题,最快的方法是调试软件,看看问题出在什么地方
1,承接Windows下驱动/应用开发 2,本人原创虚拟鼠标/键盘,触摸屏,虚拟显卡,Mirror驱动,XP无盘的SCSI虚拟磁盘驱动等 3,windows下有尝技术服务(包括BUG调试,员工培训等) 欢迎深圳和海外企业联系.msn:mfczmh@sina.com
sweetzhf
驱动牛犊
驱动牛犊
  • 注册日期2005-01-08
  • 最后登录2005-01-24
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-01-12 22:50
老大我有几个不懂的地方,
1.////分配内存空间
Rsvd = (PRSVD)(MyPackets->ProtocolReserved);
Rsvd->OriginalPkt = Packet;这里是Packet还是NULL啊?

2.if(is_send==1)
{

**这里是不是必须加:NdisIMCopySendCompletePerPacketInfo (Packet, MyPackets);  //???

DBGPRINT(" pt send complete call miniport send completen");

//释放NdisUnchainBufferAtFront
NdisUnchainBufferAtFront(Packet ,&firstBuffer); //从MyPacket中解除buffer
.................

3.PtSendComplete里:
....................
//释放NdisUnchainBufferAtFront
NdisUnchainBufferAtFront(Packet ,&firstBuffer);
这里的Packet是不是就是原来NdisSend的时候,带的参数Packets传过来好施放自己原来在PtReceivePacket里分配的包和内存啊?

4.这里是这样写
if(is_send==1)
{

DBGPRINT(" pt send complete call miniport send completen");

//释放NdisUnchainBufferAtFront
NdisUnchainBufferAtFront(Packet ,&firstBuffer); //从MyPacket中解除buffer
DBGPRINT(" pt send complete unchain completen");
NdisQueryBufferSafe(firstBuffer, &pPacketContent, &BufLength,32 );//取得buffer的虚地址
DBGPRINT(" pt send complete query buffer completen");

//释放NdisFreeMemory:pPacketContent
if(pPacketContent!= NULL)
NdisFreeMemory(pPacketContent,BufLength, 0);
DBGPRINT(" pt send complete free memory completen");
NdisFreeBuffer(firstBuffer); //释放buffer
DBGPRINT(" pt send complete free completen");

//释放NdisDprFreePacketacket
NdisDprFreePacket(Packet);
DBGPRINT(" pt send complete all completen");
is_send=2;
}
else
{
NdisDprFreePacket(Packet);
NdisMSendComplete(pAdapt->MiniportHandle,
Pkt,
Status);
}

还是这样写啊
if(is_send==1)
{



DBGPRINT(" pt send complete call miniport send completen");

//释放NdisUnchainBufferAtFront
NdisUnchainBufferAtFront(Packet ,&firstBuffer); //从MyPacket中解除buffer
DBGPRINT(" pt send complete unchain completen");
NdisQueryBufferSafe(firstBuffer, &pPacketContent, &BufLength,32 );//取得buffer的虚地址
DBGPRINT(" pt send complete query buffer completen");

//释放NdisFreeMemory:pPacketContent
if(pPacketContent!= NULL)
NdisFreeMemory(pPacketContent,BufLength, 0);
DBGPRINT(" pt send complete free memory completen");
NdisFreeBuffer(firstBuffer); //释放buffer
DBGPRINT(" pt send complete free completen");

//释放NdisDprFreePacketacket
NdisDprFreePacket(Packet);
DBGPRINT(" pt send complete all completen");
is_send=2;
}
else
{
NdisDprFreePacket(Packet);

}

NdisMSendComplete(pAdapt->MiniportHandle,
Pkt,
Status);


谢谢老大的回答,肯求指教啊!!!!!!!!!!!!!!!!
snowStart
驱动老牛
驱动老牛
  • 注册日期2004-04-06
  • 最后登录2011-06-02
  • 粉丝0
  • 关注0
  • 积分95分
  • 威望19点
  • 贡献值177点
  • 好评度1点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-01-13 11:02
篮屏信息是什么?

记录一下贴出来瞧瞧
学习,关注,交流中... [email=fengyu@163.com]Email:snowstarth@163.com[/email] [url]http://bbs.zndev.com/?a=snowStart[/url]
shortlight
驱动牛犊
驱动牛犊
  • 注册日期2003-11-29
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分16分
  • 威望81点
  • 贡献值0点
  • 好评度14点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2005-01-13 17:00
为什么要在PtReceivePacket函数里调用发送数据得函数,你可以在MpSend里调用NdisSend呀
AllenZh
驱动老牛
驱动老牛
  • 注册日期2001-08-19
  • 最后登录2015-11-27
  • 粉丝19
  • 关注10
  • 积分1316分
  • 威望2387点
  • 贡献值7点
  • 好评度321点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2005-01-14 15:15
为什么要在PtReceivePacket函数里调用发送数据得函数,你可以在MpSend里调用NdisSend呀

问得好,估计是要将收到的数据转发
1,承接Windows下驱动/应用开发 2,本人原创虚拟鼠标/键盘,触摸屏,虚拟显卡,Mirror驱动,XP无盘的SCSI虚拟磁盘驱动等 3,windows下有尝技术服务(包括BUG调试,员工培训等) 欢迎深圳和海外企业联系.msn:mfczmh@sina.com
游客

返回顶部