moqingsong
论坛版主
论坛版主
  • 注册日期2002-04-07
  • 最后登录2011-02-03
  • 粉丝0
  • 关注0
  • 积分74分
  • 威望71点
  • 贡献值0点
  • 好评度10点
  • 原创分0分
  • 专家分0分
阅读:2770回复:19

passthru 加密数据包的发送问题,请sirroom给指导一下

楼主#
更多 发布于:2002-05-08 20:42
在passthru的mpsend中,具体在作的就是改变ping 送下来的数据,在mpsend里做。按照win2000 ddk protocol driver 2.2,2.5 里的介绍作的。谁知道做到最后了数据送不出去了。
1。调试过程中有蓝屏,可能是我哪里访问了错误地址,所以我把主要的函数贴出来了,有点俗,没办法。
2。从新生成的mypacket总是不能正确的送出去,buffer的连接好像总是不对。


   VirtualMem=ExAllocatePool(.. ,2000);  //defined memory
             (代替NdisAllocateMemoryWithTag,不知对不对)
  NdisAllocateBuffer(&Status,
          &SendBuffer,
....,
VirtualMem, ..);

然后是找数据:
NdisQueryPacket(Packet, NULL, NULL, NULL,
&SendPktLen);

把他们拷到缓存里:
CopiedLengh=CopyPacketToMyBuffer(VirtualMem, Packet, 0, SendPktLen );

然后定义了一个mdl到buffer里去dbgprint了一下,copy得还对。
接下来是自己的mypacket:
NdisAllocatePacket(&Status,
  &MyPacket,
  pAdapt->SendPacketPoolHandle);
把它和buffer连起来:
NdisChainBufferAtBack(
MyPacket,
SendBuffer
);



# NdisQueryPacket(MyPacket, NULL, NULL,
# &MyPacketFirstBuffer,
# &SendPktLen);

把mypacket的MyPacketFirstBuffer取出来
Rsvd = (PRSVD)(MyPacket->ProtocolReserved);
Rsvd->OriginalPkt = Packet;
MyPacket->Private.Flags = Flags;
保存ProtocolReserved和flags
一步一步调到这里,都还没错的感觉,但下边这些代码我就不觉的有什么地方对的了,不知道为什么我定义的buffer就是连不上来。
# MyPacket->Private.Head = MyPacketFirstBuffer;
这句我是想再确认一下mypacket确实连到了MyPacketFirstBuffer。但地下的tail我就不知道应该添什么了

//MyPacket->Private.Tail = (MyPacketFirstBuffer+CurSendPktLen);

取packet的标志copy过来:
NdisSetPacketFlags(MyPacket, NdisGetPacketFlags(Packet));
//NDIS_FLAGS_DONT_LOOPBACK);

把oob也copy 过来,纯粹是抄例子。但好像是必须的。
NdisMoveMemory(NDIS_OOB_DATA_FROM_PACKET(MyPacket),
  NDIS_OOB_DATA_FROM_PACKET(Packet),
  sizeof(NDIS_PACKET_OOB_DATA));

把packet info 从packet里 copy过来

*NDIS_PACKET_EXTENSION_FROM_PACKET(MyPacket) = *NDIS_PACKET_EXTENSION_FROM_PACKET(Packet);

把MEDIA_SPECIFIC_INFO 从packet里 copy过来,纯粹是抄例子。但好像是必须的。

NDIS_GET_PACKET_MEDIA_SPECIFIC_INFO(Packet,
&MediaSpecificInfo,
&MediaSpecificInfoSize);
NDIS_SET_PACKET_MEDIA_SPECIFIC_INFO(MyPacket,
MediaSpecificInfo,
MediaSpecificInfoSize);
然后把包发出去
NdisSend(&Status, pAdapt->BindingHandle,
MyPacket);
用SOFTICE跟
能执行两次MPSEND,到第三次的时候,就访问非法内存去了。
那两次包也没发出去,不知道跑哪去了。
我要是不加有#的几行就不访问非法内存了,整个工作的挺好的样子,就是报出不去,ping, time out.

其他的地方都和passthru没作本质性的变化,是哪里有问题呢?mpsend之外的其他部分在这个过程中不需要作改动吧?





[编辑 -  5/9/02 作者: moqingsong]

最新喜欢:

aasa2aasa2 donkeyyundonkey...
按第一贴的“给分”键,给分。
sirroom
驱动大牛
驱动大牛
  • 注册日期2001-07-30
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望11点
  • 贡献值1点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-05-09 10:00
在passthru的mpsend中,具体在作的就是改变ping 送下来的数据,在mpsend里做。按照win2000 ddk protocol driver 2.2,2.5 里的介绍作的。谁知道做到最后了数据送不出去了。
   VirtualMem=ExAllocatePool(.. ,2000);  //defined memory
             (代替NdisAllocateMemoryWithTag,不知对不对)
  NdisAllocateBuffer(&Status,
          &SendBuffer,
....,
VirtualMem, ..);

然后是找数据:
NdisQueryPacket(Packet, NULL, NULL, NULL,
&SendPktLen);

把他们拷到缓存里:
CopiedLengh=CopyPacketToMyBuffer(VirtualMem, Packet, 0, SendPktLen );

然后定义了一个mdl到buffer里去dbgprint了一下,copy得还对。
接下来是自己的mypacket:
NdisAllocatePacket(&Status,
  &MyPacket,
  pAdapt->SendPacketPoolHandle);
把它和buffer连起来:
NdisChainBufferAtBack(
MyPacket,
SendBuffer
);
把mypacket的MyPacketFirstBuffer取出来
Rsvd = (PRSVD)(MyPacket->ProtocolReserved);
Rsvd->OriginalPkt = Packet;
MyPacket->Private.Flags = Flags;
保存ProtocolReserved和flags
一步一步调到这里,都还没错的感觉,但下边这些代码我就不觉的有什么地方对的了,不知道为什么我定义的buffer就是连不上来。
# MyPacket->Private.Head = MyPacketFirstBuffer;
这句我是想再确认一下mypacket确实连到了MyPacketFirstBuffer。但地下的tail我就不知道应该添什么了

//MyPacket->Private.Tail = (MyPacketFirstBuffer+CurSendPktLen);

取packet的标志copy过来:
NdisSetPacketFlags(MyPacket, NdisGetPacketFlags(Packet));
//NDIS_FLAGS_DONT_LOOPBACK);

把oob也copy 过来,纯粹是抄例子。但好像是必须的。
NdisMoveMemory(NDIS_OOB_DATA_FROM_PACKET(MyPacket),
  NDIS_OOB_DATA_FROM_PACKET(Packet),
  sizeof(NDIS_PACKET_OOB_DATA));

把packet info 从packet里 copy过来

*NDIS_PACKET_EXTENSION_FROM_PACKET(MyPacket) = *NDIS_PACKET_EXTENSION_FROM_PACKET(Packet);

把MEDIA_SPECIFIC_INFO 从packet里 copy过来,纯粹是抄例子。但好像是必须的。

NDIS_GET_PACKET_MEDIA_SPECIFIC_INFO(Packet,
&MediaSpecificInfo,
&MediaSpecificInfoSize);
NDIS_SET_PACKET_MEDIA_SPECIFIC_INFO(MyPacket,
MediaSpecificInfo,
MediaSpecificInfoSize);
然后把包发出去
NdisSend(&Status, pAdapt->BindingHandle,
MyPacket);
用SOFTICE跟
能执行两次MPSEND,到第三次的时候,就访问非法内存去了。
那两次包也没发出去,不知道跑哪去了。
我要是不加有#的几行就不访问非法内存了,整个工作的挺好的样子,就是报出不去,ping, time out.

其他的地方都和passthru没作本质性的变化,是哪里有问题呢?mpsend之外的其他部分在这个过程中不需要作改动吧?
[编辑 -  5/9/02 作者: moqingsong]


我只能说说我的理解,有可能是错的,hehe,这类的问题偶觉得要胡版主可以给出正解:)
   先说说
MyPacket->Private.Head = Packet->Private.Head;
MyPacket->Private.Tail = Packet->Private.Tail;
我认为passthru就是用的这个来拷贝数据的。
而在你的程序中,你自已已经把数据copy出来后,在你用NdisChainBufferAtBack时你的Head与Tail与你的buff 发生了关系,细节你可以看在ndis.h中细看NdisChainBufferAtBack,然后你就会明白了

111
swift
驱动中牛
驱动中牛
  • 注册日期2001-07-26
  • 最后登录2007-05-09
  • 粉丝0
  • 关注0
  • 积分70分
  • 威望7点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-05-09 10:05
我只是大至的读了一个,不仔细,但出现内存error,基本都是内存的release问题,我看到你的程序里有allocatepacket,这样释放这个packet descriptor就是个问题,通常是packet struct里面有保留项,可以保存一些自己的特别值,你可以你的allocate的packet做个标记,然后在sendcomplete里释放掉,加密的时候通常都会有这个问题!
还有就是加密后的数据包的checksum问题,这种checksum有些是系统做,有些的网卡做,最好的方法是拦截oid,如果不能拦到就自己做checksum.
moqingsong
论坛版主
论坛版主
  • 注册日期2002-04-07
  • 最后登录2011-02-03
  • 粉丝0
  • 关注0
  • 积分74分
  • 威望71点
  • 贡献值0点
  • 好评度10点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-05-09 10:15
整理一下我的加密思路:
1。只在mpsend里作改动就可以把加密数据送下去,(不知对不对?)分配一块memory,再分配一块buffer。把上层传下来的packet copy 到这里进行加密处理。

2。然后把分配好的mypacket和buffer里加密好的数据 chain起来。
3。设置mypacket包中的数据,我现在知道需要作的有:
   a.把private->head指向chain中的第一片buffer.
   b.把private->tail指向chain中的最后一片buffer.
   c.填写oob数据区,(直接从packet里copy)
   d.填写packt info数据区,(直接从packet里copy,我没重作checksum)
   e.填写media info数据区,(直接从packet里copy)
    我好像是这部分那里有问题数据发不出去。
4.发送
看了本站和白云站的一些贴子,好像大家都没在发送的部分遇到过什么大问题,是我什么地方犯了异常简单的错误啦吗?
胡版主在这方面也有异常丰富的经验,百忙之中也请给指导一下。谢了。


按第一贴的“给分”键,给分。
.X.T.I.M.
驱动大牛
驱动大牛
  • 注册日期2001-09-22
  • 最后登录2021-08-25
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-05-09 10:22
胖胖最近怎么这么积极啊??是不是志宁给你开小灶没咱们的份啊??
<IMG src="http://www.microsoft.com/traincert/images/logos/mcp.gif" border=0> <IMG src="http://www.microsoft.com/traincert/images/logos/mcdba.gif" border=0><br> <IMG src="http://www.microsoft.com/traincert/images/logos/mcse.gif" border=0> <IMG src="http://www.microsoft.com/traincert/images/logos/mcsd.gif" border=0>
.X.T.I.M.
驱动大牛
驱动大牛
  • 注册日期2001-09-22
  • 最后登录2021-08-25
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-05-09 10:30
VirtualMem=ExAllocatePool(.. ,2000); //defined memory
(代替NdisAllocateMemoryWithTag,不知对不对)
NdisAllocateBuffer(&Status,
&SendBuffer,
看看这段!我觉得还是有TAG的好,起码出错的时候知道是哪块内存~~
# MyPacket->Private.Head = MyPacketFirstBuffer;
这句我是想再确认一下mypacket确实连到了MyPacketFirstBuffer。但地下的tail我就不知道应该添什么了

//MyPacket->Private.Tail = (MyPacketFirstBuffer+CurSendPktLen);


这些复制PACKET数据的地方还是得用那个NDIS的PACKET2PACKET的函数!OOB的用OOB的宏,总之NDIS提供了的函数你为什么不用非要自己来复制??搞不懂~~最后你说SEND的部分我没完全明白你说什么,但是我感觉你是不是把一个已经释放了的资源给传到NDISSEND里想SEND出去,这个时候当然会出现错误啦!要是你的pool用的是有TAG的那不就清楚是哪块内存的问题了??当然也就知道从什么地方开始找咯!
<IMG src="http://www.microsoft.com/traincert/images/logos/mcp.gif" border=0> <IMG src="http://www.microsoft.com/traincert/images/logos/mcdba.gif" border=0><br> <IMG src="http://www.microsoft.com/traincert/images/logos/mcse.gif" border=0> <IMG src="http://www.microsoft.com/traincert/images/logos/mcsd.gif" border=0>
blue
驱动大牛
驱动大牛
  • 注册日期2001-04-25
  • 最后登录2010-10-15
  • 粉丝0
  • 关注0
  • 积分55分
  • 威望12点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-05-09 12:43
整理一下我的加密思路:
1。只在mpsend里作改动就可以把加密数据送下去,(不知对不对?)分配一块memory,再分配一块buffer。把上层传下来的packet copy 到这里进行加密处理。

2。然后把分配好的mypacket和buffer里加密好的数据 chain起来。
3。设置mypacket包中的数据,我现在知道需要作的有:
   a.把private->head指向chain中的第一片buffer.
   b.把private->tail指向chain中的最后一片buffer.
   c.填写oob数据区,(直接从packet里copy)
   d.填写packt info数据区,(直接从packet里copy,我没重作checksum)
   e.填写media info数据区,(直接从packet里copy)
    我好像是这部分那里有问题数据发不出去。
4.发送
看了本站和白云站的一些贴子,好像大家都没在发送的部分遇到过什么大问题,是我什么地方犯了异常简单的错误啦吗?


 

我认为你第三步中的a,b并不是必要的。
你如果对数据作了处理,就最好重新计算一下Check Sum;
你用Wiindows带的网络监视器或其它的sniffer查看一下IP Packet,查看一下是否正确,是否已经发送?
sirroom
驱动大牛
驱动大牛
  • 注册日期2001-07-30
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望11点
  • 贡献值1点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2002-05-09 18:18
志宁开什么小灶哦,偶很有意见的哦。偶觉得应该把在线升级的权力分给大家哈。
  我觉得大家先还是看一下ndis.h中关于NdisChainBufferAtBack吧
  #define NdisChainBufferAtBack(Packet, Buffer) \\
{ \\
PNDIS_BUFFER TmpBuffer = (Buffer); \\
\\
for (;;) \\
{ \\
if (TmpBuffer->Next == NULL) \\
break; \\
TmpBuffer = TmpBuffer->Next; \\
} \\
if ((Packet)->Private.Head != NULL) \\
{ \\
(Packet)->Private.Tail->Next = (Buffer); \\
} \\
else \\
{ \\
(Packet)->Private.Head = (Buffer); \\
} \\
(Packet)->Private.Tail = TmpBuffer; \\
TmpBuffer->Next = NULL; \\
(Packet)->Private.ValidCounts = FALSE; \\
}
在你
2。然后把分配好的mypacket和buffer里加密好的数据 chain起来。
的时候,你应该看到你的head,tail已经指向了谁。

接下来,在后面的操作中,你又
a.把private->head指向chain中的第一片buffer.
b.把private->tail指向chain中的最后一片buffer.

你觉得会发生什么情况?
head,tail指对了,当然只当这两句什么也没说,如果指的不对,hehe.......你还不如让这两个指针随便指个地方看看
  版主曾经说过对passthru中去直接操作private很不理解,看来这个真的是害人不浅。
  
111
moqingsong
论坛版主
论坛版主
  • 注册日期2002-04-07
  • 最后登录2011-02-03
  • 粉丝0
  • 关注0
  • 积分74分
  • 威望71点
  • 贡献值0点
  • 好评度10点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2002-05-09 19:40
今天调了两下,把NdisChainBufferAtBack 调前,把private->head删除,昨天睡得有点晚,正debug的时候,windows就彻底瘫痪了,删driver都起不来了(我装了双启动)。告我winnt\\system32\\config\\system文件坏了。我可怜的开发机呀。。。。。。
重装吧。谁让我犯困来着。哎。。。。。。
按第一贴的“给分”键,给分。
moqingsong
论坛版主
论坛版主
  • 注册日期2002-04-07
  • 最后登录2011-02-03
  • 粉丝0
  • 关注0
  • 积分74分
  • 威望71点
  • 贡献值0点
  • 好评度10点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2002-05-09 19:44
在机子死亡之前我记得还看了一下内存,确实有严重错误,困得有点胡涂了就又按了一下F10。
按第一贴的“给分”键,给分。
falwind
驱动牛犊
驱动牛犊
  • 注册日期2001-12-21
  • 最后登录2006-12-04
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2002-05-09 19:52
安全模式都进不去么?
moqingsong
论坛版主
论坛版主
  • 注册日期2002-04-07
  • 最后登录2011-02-03
  • 粉丝0
  • 关注0
  • 积分74分
  • 威望71点
  • 贡献值0点
  • 好评度10点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2002-05-09 22:03
进了安全模式才知道的,winnt\\system32\\config\\system文件坏了
按第一贴的“给分”键,给分。
sirroom
驱动大牛
驱动大牛
  • 注册日期2001-07-30
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望11点
  • 贡献值1点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2002-05-09 22:53
做驱动怎么都不做一个ghost??
111
moqingsong
论坛版主
论坛版主
  • 注册日期2002-04-07
  • 最后登录2011-02-03
  • 粉丝0
  • 关注0
  • 积分74分
  • 威望71点
  • 贡献值0点
  • 好评度10点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2002-05-09 22:56
这是个啥东东?
按第一贴的“给分”键,给分。
wirelessboy
驱动牛犊
驱动牛犊
  • 注册日期2002-04-21
  • 最后登录2003-12-17
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2002-05-10 00:07
在passthru的mpsend中,具体在作的就是改变ping 送下来的数据,在mpsend里做。按照win2000 ddk protocol driver 2.2,2.5 里的介绍作的。谁知道做到最后了数据送不出去了。
1。调试过程中有蓝屏,可能是我哪里访问了错误地址,所以我把主要的函数贴出来了,有点俗,没办法。
2。从新生成的mypacket总是不能正确的送出去,buffer的连接好像总是不对。


   VirtualMem=ExAllocatePool(.. ,2000);  //defined memory
             (代替NdisAllocateMemoryWithTag,不知对不对)
  NdisAllocateBuffer(&Status,
          &SendBuffer,
....,
VirtualMem, ..);

然后是找数据:
NdisQueryPacket(Packet, NULL, NULL, NULL,
&SendPktLen);

把他们拷到缓存里:
CopiedLengh=CopyPacketToMyBuffer(VirtualMem, Packet, 0, SendPktLen );

然后定义了一个mdl到buffer里去dbgprint了一下,copy得还对。
接下来是自己的mypacket:
NdisAllocatePacket(&Status,
  &MyPacket,
  pAdapt->SendPacketPoolHandle);
把它和buffer连起来:
NdisChainBufferAtBack(
MyPacket,
SendBuffer
);



# NdisQueryPacket(MyPacket, NULL, NULL,
# &MyPacketFirstBuffer,
# &SendPktLen);

把mypacket的MyPacketFirstBuffer取出来
Rsvd = (PRSVD)(MyPacket->ProtocolReserved);
Rsvd->OriginalPkt = Packet;
MyPacket->Private.Flags = Flags;
保存ProtocolReserved和flags
一步一步调到这里,都还没错的感觉,但下边这些代码我就不觉的有什么地方对的了,不知道为什么我定义的buffer就是连不上来。
# MyPacket->Private.Head = MyPacketFirstBuffer;
这句我是想再确认一下mypacket确实连到了MyPacketFirstBuffer。但地下的tail我就不知道应该添什么了

###### //MyPacket->Private.Tail = (MyPacketFirstBuffer+CurSendPktLen);

取packet的标志copy过来:
NdisSetPacketFlags(MyPacket, NdisGetPacketFlags(Packet));
//NDIS_FLAGS_DONT_LOOPBACK);

把oob也copy 过来,纯粹是抄例子。但好像是必须的。
NdisMoveMemory(NDIS_OOB_DATA_FROM_PACKET(MyPacket),
  NDIS_OOB_DATA_FROM_PACKET(Packet),
  sizeof(NDIS_PACKET_OOB_DATA));

把packet info 从packet里 copy过来

*NDIS_PACKET_EXTENSION_FROM_PACKET(MyPacket) = *NDIS_PACKET_EXTENSION_FROM_PACKET(Packet);

把MEDIA_SPECIFIC_INFO 从packet里 copy过来,纯粹是抄例子。但好像是必须的。

NDIS_GET_PACKET_MEDIA_SPECIFIC_INFO(Packet,
&MediaSpecificInfo,
&MediaSpecificInfoSize);
NDIS_SET_PACKET_MEDIA_SPECIFIC_INFO(MyPacket,
MediaSpecificInfo,
MediaSpecificInfoSize);
然后把包发出去
NdisSend(&Status, pAdapt->BindingHandle,
MyPacket);
用SOFTICE跟
能执行两次MPSEND,到第三次的时候,就访问非法内存去了。
那两次包也没发出去,不知道跑哪去了。
我要是不加有#的几行就不访问非法内存了,整个工作的挺好的样子,就是报出不去,ping, time out.

其他的地方都和passthru没作本质性的变化,是哪里有问题呢?mpsend之外的其他部分在这个过程中不需要作改动吧?





[编辑 -  5/9/02 作者: moqingsong]


今天看了看Private的结构,觉得######的地方有问题。

Private的定义如下:
typedef struct _NDIS_PACKET_PRIVATE
{
UINT PhysicalCount; //Number of physical in packet
UINT TotalLength; //Total amount of data in the packet
PNDIS_BUFFER Head;//fist buffer in the chain
PNDIS_BUFFER Tail;//last buffer in the chain

............
}

看了这个结构,我想大家应该知道错在何处了
moqingsong
论坛版主
论坛版主
  • 注册日期2002-04-07
  • 最后登录2011-02-03
  • 粉丝0
  • 关注0
  • 积分74分
  • 威望71点
  • 贡献值0点
  • 好评度10点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2002-05-10 09:01
找到了,原来是个backup硬盘的东西.谢谢。
按第一贴的“给分”键,给分。
sirroom
驱动大牛
驱动大牛
  • 注册日期2001-07-30
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望11点
  • 贡献值1点
  • 好评度0点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2002-05-10 23:35
恢复系统比你进安全模式还快,爽吧
111
sirroom
驱动大牛
驱动大牛
  • 注册日期2001-07-30
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望11点
  • 贡献值1点
  • 好评度0点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2002-05-11 11:23
可惜要知道错误就得在错误代码里走一遍
111
moqingsong
论坛版主
论坛版主
  • 注册日期2002-04-07
  • 最后登录2011-02-03
  • 粉丝0
  • 关注0
  • 积分74分
  • 威望71点
  • 贡献值0点
  • 好评度10点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2002-05-11 12:34
正在走。。。。
按第一贴的“给分”键,给分。
moqingsong
论坛版主
论坛版主
  • 注册日期2002-04-07
  • 最后登录2011-02-03
  • 粉丝0
  • 关注0
  • 积分74分
  • 威望71点
  • 贡献值0点
  • 好评度10点
  • 原创分0分
  • 专家分0分
19楼#
发布于:2002-05-14 20:17


这些复制PACKET数据的地方还是得用那个NDIS的PACKET2PACKET的函数!OOB的用OOB的宏,总之NDIS提供了的函数你为什么不用非要自己来复制??搞不懂~~最后你说SEND的部分我没完全明白你说什么,但是我感觉你是不是把一个已经释放了的资源给传到NDISSEND里想SEND出去,这个时候当然会出现错误啦!要是你的pool用的是有TAG的那不就清楚是哪块内存的问题了??当然也就知道从什么地方开始找咯!

1。我试着使用NDIS的PACKET2PACKET复制数据,不再死机了。有时能发出去一队垃圾(不是我要发的东西),但同样的代码,换一台机子又发不出去了。不明白。
2。你从哪里感觉到我“把一个已经释放了的资源给传到NDISSEND里想SEND出去”的我也有这种感觉,但不知在哪里犯了错误。需要的话,把源码mail给你?
这感觉今天早晨被验证了一下:在可以发出packet的时候,在复制了数据之后packet packet,packet mypacket都可以看到数据报,而发不出去的时候packet是空的,我不知道这是不是意味着他已经被释放了?
3.我对NDIS_PACKET,NDIS_BUFFER,VirtualAddress,这几个结构之间的关系搞不清楚,话比较长,另起了一个贴子。主要是在debug中的问题。




[编辑 -  5/15/02 by  moqingsong]
按第一贴的“给分”键,给分。
游客

返回顶部