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

ndis的数据结构 NDIS_PACKET,NDIS_BUFFER,VirtualAddress,这几个结构之间是什么关系,不知道胡板主能不能给指导一下。

楼主#
更多 发布于:2002-05-14 16:57
NDIS_PACKET,NDIS_BUFFER,VirtualAddress,这几个结构之间是什么关系?
packet是一个结构:
//
// packet definition
//
typedef struct _NDIS_PACKET
{
NDIS_PACKET_PRIVATE Private;

union
{
struct // For Connection-less miniports
{
UCHAR MiniportReserved[2*sizeof(PVOID)];
UCHAR WrapperReserved[2*sizeof(PVOID)];
};

struct
{
//
// For de-serialized miniports. And by implication conn-oriented miniports.
// This is for the send-path only. Packets indicated will use WrapperReserved
// instead of WrapperReservedEx
//
UCHAR MiniportReservedEx[3*sizeof(PVOID)];
UCHAR WrapperReservedEx[sizeof(PVOID)];
};

struct
{
UCHAR MacReserved[4*sizeof(PVOID)];
};
};

ULONG_PTR Reserved[2]; // For compatibility with Win95
UCHAR ProtocolReserved[1];

} NDIS_PACKET, *PNDIS_PACKET, **PPNDIS_PACKET;

其中:
typedef struct _NDIS_PACKET_PRIVATE
{
UINT PhysicalCount; // number of physical pages in packet.
UINT TotalLength; // Total amount of data in the packet.
PNDIS_BUFFER Head; // first buffer in the chain
PNDIS_BUFFER Tail; // last buffer in the chain

// if Head is NULL the chain is empty; Tail doesn\'t have to be NULL also

PNDIS_PACKET_POOL Pool; // so we know where to free it back to
UINT Count;
ULONG Flags;
BOOLEAN ValidCounts;
UCHAR NdisPacketFlags; // See fPACKET_xxx bits below
USHORT NdisPacketOobOffset;
} NDIS_PACKET_PRIVATE, * PNDIS_PACKET_PRIVATE;




 NDIS_BUFFER是一个MDL也就是:


typedef struct _MDL {
    struct _MDL *Next;
    CSHORT Size;
    CSHORT MdlFlags;
    struct _EPROCESS *Process;
    PVOID MappedSystemVa;
    PVOID StartVa;
    ULONG ByteCount;
    ULONG ByteOffset;
} MDL, *PMDL;

那么,NDIS_BUFFER,VirtualAddress 是什么关系呢?
比如我进行这样的调用:

NdisAllocateBuffer(&Buf_Status,
&SendBuffer,
BufferPoolHandle,
VirtualMem,
SEND_BufferSize
);


PNDIS_PACKET MyPacket;
PNDIS_BUFFER         SendBuffer;
//PVOID VirtualMem;
PUCHAR VirtualMem;

那么,当我取一个packet在内存之后
packet mypacket
dd  MyPacket
dd  SendBuffer
dd  VirtualMem
会看到什么结果,具体地说在VirtualMem,SendBuffer的位置应该有什么?

上面对这几个结构的定义有问题吗?

图片是对这些结构的说明,但我没找到关于VirtualMem的。










[编辑 -  5/15/02 by  moqingsong]

最新喜欢:

flyfoxflyfox
按第一贴的“给分”键,给分。
moqingsong
论坛版主
论坛版主
  • 注册日期2002-04-07
  • 最后登录2011-02-03
  • 粉丝0
  • 关注0
  • 积分74分
  • 威望71点
  • 贡献值0点
  • 好评度10点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-05-16 09:11
不会没人知道吧?太复杂?说不清楚?
按第一贴的“给分”键,给分。
wirelessboy
驱动牛犊
驱动牛犊
  • 注册日期2002-04-21
  • 最后登录2003-12-17
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-05-16 09:53
我曾经做过试验,用物理地址读取数据,好像有些问题(数据很怪异),用虚拟地址杜就没有这些问题了。不知道这些有没有什么用处?:)
fenger_li
驱动老牛
驱动老牛
  • 注册日期2002-03-26
  • 最后登录2005-04-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-05-16 10:06
VirtualMem 是系统映射的。

SendBuffer 是调用创建的buffer descriptor

其实这两者,你多不比去关心。
没必要看他们的值吧


有点意思。。。 呵呵!
moqingsong
论坛版主
论坛版主
  • 注册日期2002-04-07
  • 最后登录2011-02-03
  • 粉丝0
  • 关注0
  • 积分74分
  • 威望71点
  • 贡献值0点
  • 好评度10点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-05-16 10:24
我曾经做过试验,用物理地址读取数据,好像有些问题(数据很怪异),用虚拟地址杜就没有这些问题了。不知道这些有没有什么用处?:)

我感觉好像跟网络字节序有关,8086序列的好像是高字节在前,正好和网络字节序相反。所以很怪异,虚拟地址的应该是已经变过来了。
to fenger_li
VirtualMem和SendBuffer是不是同一个指针?我在调用的时候,好像哪里把指针搞错了,所以我就得去看看了,你有什么别的好办法吗?
按第一贴的“给分”键,给分。
fenger_li
驱动老牛
驱动老牛
  • 注册日期2002-03-26
  • 最后登录2005-04-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-05-16 11:44
:)
我想,应该是一样的。你式式吧


不清楚你怎么搞错了的。
有点意思。。。 呵呵!
.X.T.I.M.
驱动大牛
驱动大牛
  • 注册日期2001-09-22
  • 最后登录2021-08-25
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-05-16 12:30
没有什么直接的关系!我觉得你的问题没说清楚~~不知道怎么回答你!你先说清楚问题!
<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>
moqingsong
论坛版主
论坛版主
  • 注册日期2002-04-07
  • 最后登录2011-02-03
  • 粉丝0
  • 关注0
  • 积分74分
  • 威望71点
  • 贡献值0点
  • 好评度10点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2002-05-16 12:49
我在前边有个贴子里边就说的是这事:“passthru 加密数据包的发送问题,请sirroom给指导一下“给提点建议?
按第一贴的“给分”键,给分。
moqingsong
论坛版主
论坛版主
  • 注册日期2002-04-07
  • 最后登录2011-02-03
  • 粉丝0
  • 关注0
  • 积分74分
  • 威望71点
  • 贡献值0点
  • 好评度10点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2002-05-16 18:00
没有什么直接的关系!我觉得你的问题没说清楚~~不知道怎么回答你!你先说清楚问题!

我在发送的过程中碰到packetchain错误的问题,所以我开始在整个的路径上debug,这样就遇到了需要搞清楚NDIS_PACKET,NDIS_BUFFER,VirtualAddress,这几个结构之间关系的问题。也就是说我需要判定到那一步为止我的发送过程还是正确的,因此我做了dd MyPacket
dd SendBuffer
dd VirtualMem
我发现我不能正在内存中,按照我已经知道的结构正确的找到他们,也就是说我不能从mypacket按照他的指针找到sendbuffer,所以我不能判断mypacket和sendbuffer是不是chain的正确。
同样,由于不知道sendbuffer和virtualmem的关系,我也不能正确判断sendbuffer是不是用的我希望的virtualmem.

谢谢大家。

[编辑 -  5/17/02 by  moqingsong]
按第一贴的“给分”键,给分。
monkeyy
驱动中牛
驱动中牛
  • 注册日期2001-12-06
  • 最后登录2010-10-10
  • 粉丝0
  • 关注0
  • 积分315分
  • 威望84点
  • 贡献值0点
  • 好评度32点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2002-05-20 10:40
这个问题在《使用TCP/IP进行网际互连》中有详细说明。这是一种典型的mbuf缓冲区方式。
其实NDIS_BUFFER就是起到一个指出数据地址和为释放作准备罢了,因为所有的数据缓冲区均在系统区,因此我们必须指出它的位置,以及该怎么把他释放到什么地方。
NDIS_PACKET_PRIVATE就是起到一个串联作用,就是那本书里讲的Packet discription。只不过微软为了某种目的而使用了NDIS_PACKET,至于为什么用他,我想大家都知道吧!
其实对我们来说,主要是NDIS_BUFFER,在他里面是数据,当然还要注意那些微软的保留项,以及我们要注意的!
我的理解就是如此!
谁能指点一下!!
听说老虎会吃人,所以从没想过去摸老虎的屁股。:( :(
moqingsong
论坛版主
论坛版主
  • 注册日期2002-04-07
  • 最后登录2011-02-03
  • 粉丝0
  • 关注0
  • 积分74分
  • 威望71点
  • 贡献值0点
  • 好评度10点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2002-05-20 11:09
谢谢monkeyy,你提供的信息太好了。我在第二卷第三章找到了关于网络接口层的缓冲管理大约一页左右的论述。哪里还有更多吗?我看的是的第二版新版是不是说得更详细了?
按第一贴的“给分”键,给分。
monkeyy
驱动中牛
驱动中牛
  • 注册日期2001-12-06
  • 最后登录2010-10-10
  • 粉丝0
  • 关注0
  • 积分315分
  • 威望84点
  • 贡献值0点
  • 好评度32点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2002-05-20 15:37
在《TCP/IP协议祥解―2》中有更详细的说明。
不好意思刚才记错了!! ;) ;)
听说老虎会吃人,所以从没想过去摸老虎的屁股。:( :(
moqingsong
论坛版主
论坛版主
  • 注册日期2002-04-07
  • 最后登录2011-02-03
  • 粉丝0
  • 关注0
  • 积分74分
  • 威望71点
  • 贡献值0点
  • 好评度10点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2002-05-20 15:45
哪里有电子版吗?这书我手头没有。
按第一贴的“给分”键,给分。
monkeyy
驱动中牛
驱动中牛
  • 注册日期2001-12-06
  • 最后登录2010-10-10
  • 粉丝0
  • 关注0
  • 积分315分
  • 威望84点
  • 贡献值0点
  • 好评度32点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2002-05-20 15:56
我有,可是怎么给你呢??
听说老虎会吃人,所以从没想过去摸老虎的屁股。:( :(
monkeyy
驱动中牛
驱动中牛
  • 注册日期2001-12-06
  • 最后登录2010-10-10
  • 粉丝0
  • 关注0
  • 积分315分
  • 威望84点
  • 贡献值0点
  • 好评度32点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2002-05-20 15:57
我另开个帖子,把这点东西给你发出来吧!!
听说老虎会吃人,所以从没想过去摸老虎的屁股。:( :(
monkeyy
驱动中牛
驱动中牛
  • 注册日期2001-12-06
  • 最后登录2010-10-10
  • 粉丝0
  • 关注0
  • 积分315分
  • 威望84点
  • 贡献值0点
  • 好评度32点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2002-05-20 15:59
不行,太多了。
听说老虎会吃人,所以从没想过去摸老虎的屁股。:( :(
monkeyy
驱动中牛
驱动中牛
  • 注册日期2001-12-06
  • 最后登录2010-10-10
  • 粉丝0
  • 关注0
  • 积分315分
  • 威望84点
  • 贡献值0点
  • 好评度32点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2002-05-20 16:02
说个办法吧!我晚上再来发给你,这会儿有课,我要走了!!
祝你好运!! :P
听说老虎会吃人,所以从没想过去摸老虎的屁股。:( :(
moqingsong
论坛版主
论坛版主
  • 注册日期2002-04-07
  • 最后登录2011-02-03
  • 粉丝0
  • 关注0
  • 积分74分
  • 威望71点
  • 贡献值0点
  • 好评度10点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2002-05-20 16:11
你用的学校的网?上面能开ftp什么的吗?放在上面我去取就可以了。要是没有的话,我知道safe123之类的网站上可以ftp。不知你那里速度是不是有问题。email:moqingsong@sohu.com

[编辑 -  5/20/02 by  moqingsong]
按第一贴的“给分”键,给分。
monkeyy
驱动中牛
驱动中牛
  • 注册日期2001-12-06
  • 最后登录2010-10-10
  • 粉丝0
  • 关注0
  • 积分315分
  • 威望84点
  • 贡献值0点
  • 好评度32点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2002-05-21 13:26
这恐怕不行呀!你说说www.safe123的FTP地址吧,我试一下
听说老虎会吃人,所以从没想过去摸老虎的屁股。:( :(
moqingsong
论坛版主
论坛版主
  • 注册日期2002-04-07
  • 最后登录2011-02-03
  • 粉丝0
  • 关注0
  • 积分74分
  • 威望71点
  • 贡献值0点
  • 好评度10点
  • 原创分0分
  • 专家分0分
19楼#
发布于:2002-05-21 16:47
ftpserver:  www.safe123.com
    port:  21
    user:  share
     pwd:  safe123safe123
如果你是用cuteftp, 那么问题可能是你的连接类型设成了PASV,你要改成PORT就可以了。

在菜单 Edit --- Global Settings  设置 Connectiong Type 为 PORT就可以了

我又看了一下:
只能浏览下载不能上传删除

 如果有谁想上传软件,
需要和站长联系,索取ftp 帐号
faint!

还得另想办法,不过你要是没去过的话,可以去一下,好东西很多的。
 

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

返回顶部