lsshao
驱动牛犊
驱动牛犊
  • 注册日期2004-02-03
  • 最后登录2007-10-29
  • 粉丝0
  • 关注0
  • 积分33分
  • 威望5点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
阅读:2435回复:0

DriverNetwork miniport驱动学习(7)

楼主#
更多 发布于:2004-03-18 16:59
管理NDIS缓冲
NDIS_BUFFER是一个基本的NDIS数据类型,供所有类型的的网络驱动用来描述分配在系统内存的数据块。NDIS_BUFFER 类似Windows NT内核的内存描述符链表。
DriverNetworks通过KNdisBuffer类抽象NDIS缓冲。KNdisBuffer类是PNDIS_BUFFER的C++封装,并且和PNDIS_ BUFFER的运行效率一样。允许KNdisBuffer类型可以直接用于所有使用PNDIS_BUFFER作为形参的函数
NDIS缓冲常常从NDIS缓冲池中分配。在DriverNetworks中,缓冲池由KNdisBufferPool类表示。如果驱动管理自己的缓冲池,它通常包括一个KNdisBufferPool对象作为adapter类的数据成员,在adapter的Initialize()处理程序对它初始化,并且在其他地方分配和释放缓冲描述符。
例1:
class MyAdapter : public KNdisMiniAdapter {
. . .
KNdisBufferPool m_Pool;
  public:
NDIS_STATUS Initialize((KNdisMedium& Medium, IN KNdisConfig& Config)) {
. . .
m_Pool.Initialize(8); //初始化8个描述符的缓冲池
ASSERT(m_Pool.IsValid());
. . .
}
void SomeMethod(PVOID Data, UINT DataSize) {//为特定内存块分配描述符
     KNdisBuffer buf = m_Pool.Allocate(Data, DataSize);
     if (buf.IsValid()) { /* use buffer */ }
     else /* pool is exhausted! */;
}
void AnotherMethod(KNdisBuffer& buf) { // 将描述符释放回池
m_Pool.Free(buf);
}
};
游客

返回顶部