阅读:3995回复:31
ndis的数据结构 NDIS_PACKET,NDIS_BUFFER,VirtualAddress,这几个结构之间是什么关系,不知道胡板主能不能给指导一下。
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] |
|
最新喜欢:flyfox
|
沙发#
发布于:2002-05-16 09:11
不会没人知道吧?太复杂?说不清楚?
|
|
|
板凳#
发布于:2002-05-16 09:53
我曾经做过试验,用物理地址读取数据,好像有些问题(数据很怪异),用虚拟地址杜就没有这些问题了。不知道这些有没有什么用处?:)
|
|
地板#
发布于:2002-05-16 10:06
VirtualMem 是系统映射的。
SendBuffer 是调用创建的buffer descriptor 其实这两者,你多不比去关心。 没必要看他们的值吧 ! |
|
|
地下室#
发布于:2002-05-16 10:24
我曾经做过试验,用物理地址读取数据,好像有些问题(数据很怪异),用虚拟地址杜就没有这些问题了。不知道这些有没有什么用处?:) 我感觉好像跟网络字节序有关,8086序列的好像是高字节在前,正好和网络字节序相反。所以很怪异,虚拟地址的应该是已经变过来了。 to fenger_li VirtualMem和SendBuffer是不是同一个指针?我在调用的时候,好像哪里把指针搞错了,所以我就得去看看了,你有什么别的好办法吗? |
|
|
5楼#
发布于:2002-05-16 11:44
:)
我想,应该是一样的。你式式吧 不清楚你怎么搞错了的。 |
|
|
6楼#
发布于:2002-05-16 12:30
没有什么直接的关系!我觉得你的问题没说清楚~~不知道怎么回答你!你先说清楚问题!
|
|
|
7楼#
发布于:2002-05-16 12:49
我在前边有个贴子里边就说的是这事:“passthru 加密数据包的发送问题,请sirroom给指导一下“给提点建议?
|
|
|
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] |
|
|
9楼#
发布于:2002-05-20 10:40
这个问题在《使用TCP/IP进行网际互连》中有详细说明。这是一种典型的mbuf缓冲区方式。
其实NDIS_BUFFER就是起到一个指出数据地址和为释放作准备罢了,因为所有的数据缓冲区均在系统区,因此我们必须指出它的位置,以及该怎么把他释放到什么地方。 NDIS_PACKET_PRIVATE就是起到一个串联作用,就是那本书里讲的Packet discription。只不过微软为了某种目的而使用了NDIS_PACKET,至于为什么用他,我想大家都知道吧! 其实对我们来说,主要是NDIS_BUFFER,在他里面是数据,当然还要注意那些微软的保留项,以及我们要注意的! 我的理解就是如此! 谁能指点一下!! |
|
|
10楼#
发布于:2002-05-20 11:09
谢谢monkeyy,你提供的信息太好了。我在第二卷第三章找到了关于网络接口层的缓冲管理大约一页左右的论述。哪里还有更多吗?我看的是的第二版新版是不是说得更详细了?
|
|
|
11楼#
发布于:2002-05-20 15:37
在《TCP/IP协议祥解―2》中有更详细的说明。
不好意思刚才记错了!! ;) ;) |
|
|
12楼#
发布于:2002-05-20 15:45
哪里有电子版吗?这书我手头没有。
|
|
|
13楼#
发布于:2002-05-20 15:56
我有,可是怎么给你呢??
|
|
|
14楼#
发布于:2002-05-20 15:57
我另开个帖子,把这点东西给你发出来吧!!
|
|
|
15楼#
发布于:2002-05-20 15:59
不行,太多了。
|
|
|
16楼#
发布于:2002-05-20 16:02
说个办法吧!我晚上再来发给你,这会儿有课,我要走了!!
祝你好运!! :P |
|
|
17楼#
发布于:2002-05-20 16:11
你用的学校的网?上面能开ftp什么的吗?放在上面我去取就可以了。要是没有的话,我知道safe123之类的网站上可以ftp。不知你那里速度是不是有问题。email:moqingsong@sohu.com
[编辑 - 5/20/02 by moqingsong] |
|
|
18楼#
发布于:2002-05-21 13:26
这恐怕不行呀!你说说www.safe123的FTP地址吧,我试一下
|
|
|
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] |
|
|
上一页
下一页