今天我们来看看如何拷贝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(只有一个),同时拿到起始地址&