今天我们来看看如何拷贝NBL中的数据。有时候需要更改数据包中的某些数据,就需要用到此功能(能直接在原来的nBL上更改,然后发送吗?)。
- 新建一个NBL作为你自己要存放拷贝数据的结构:
pCopyNBL = allocateNetBuffAndNetBufferList(pFilter, dataLength);//Defined by self
这个其实是一个自定义的函数,用来分配一个空的NBL.具体代码见后面~ - 这里考虑有很多个NBL,而且每个NB中包含多个MDL.所以拿到原始NBL的第一个NB
pCurrentNB = NET_BUFFER_LIST_FIRST_NB(pCurrentNBL);//The first NB
再得到第一个NB的第一个MDL:pMDL = NET_BUFFER_FIRST_MDL(pCurrentNB);
最后得到MDL中有用数据:包括分析offset,以及dataLength,起始地址等:mdlOffset = NET_BUFFER_DATA_OFFSET(pCurrentNB);//I am not sure ... NdisQueryMdl( pMDL,(PVOID *)&pData,&dataBufferLength,NormalPagePriority); if(pData == NULL) { DEBUGP(DL_TEST,("pData is NULL ---Fail \n")); break; } - 同理我们得到我们自定义NBL中的MDL(只有一个),同时拿到起始地址:
pCopyMDL = NET_BUFFER_FIRST_MDL(NET_BUFFER_LI

本文介绍了在NDIS过滤驱动中如何拷贝NetBufferList中的数据,详细阐述了从原始NBL获取MDL并进行数据拷贝到新分配的NBL的过程,包括内存分配、MDL遍历、数据复制等关键步骤,并提供了分配NBL的辅助函数代码。
最低0.47元/天 解锁文章
5354

被折叠的 条评论
为什么被折叠?



