阅读:2482回复:0
DriverNetwork miniport驱动学习(7)
管理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); } }; |
|