标 题: 【原创】NDIS中间层驱动开发在Win7系统下和Windows XP系统下的区别
作 者: tianhz
时 间: 2011-07-21,14:58:04
链 接: http://bbs.pediy.com/showthread.php?t=137545
网络数据由在网络上发送和接收的数据包组成。 NDIS 提供了数据结构来描述它们, NDIS
6.0 提供了如下数据结构:
1) NET_BUFFER
2) NET_BUFFER LIST
3) NET_BUFFER_LIST_CONTEXT
在 NDIS 6.0 中,NET_BUFFER 是封闭网络数据的基本构建块。每一个 NET_BUFFER 都有
一个 MDL 链。这些 MDL映射的缓冲区地址是 NET_BUFFER 指定的数据空间。这种数据映射
同 NDIS 5.X 及之前的版本使用的 NDIS_PACKET 中的映射是一样的。NDIS 提供函数来管理这
些 MDL 链。
多个NET_BUFFER可以被附加到(可以被串到)一个NET_BUFFER_LIS上。这些NET_BUFFER
被组织成一个以 NULL 结束的单链表。驱动或 NDIS仅创建一个 NET_BUFFER_LIST,应该修改
它的链表给它插入或删除一些 NET_BUFFER 结构。
NET_BUFFER_LIST 结构中包含的信息中描述了所有被串到一个链表上的 NET_BUFFER 结
构。如果 NET_BUFFER_LIST 需要上下文信息,可以分配额外的空间来存储一个
NET_BUFFER_LIST_CONTEXT 结构。NDIS 提供函数来分配、访问 NET_BUFFER_LIST_CONTEXT
中的数据。
多个 NET_BUFFER_LIST 结构可以串成一个 NET_BUFFER_LIST 链表。它们可以被组织成一
个以 NULL 结尾的单向链表。驱动可以对这个链表直接进行插入、删除操作。
NDIS 6.0 中使用的 NET_BUFFER 结构相似于 NDIS 5.X 以前使用的 NDIS_PACKET结构,每
一个 NET_BUFFER 结构中都包装了一个网络数据包。