0){NdisQueryMdl(CurrentMdl,&pSrc,&CurrLength,NormalPagePriority);if(pSrc==NULL){bytesCopied=0;break;}////Currentbufferlengthisgreaterthantheoffsettothebuffer//if(CurrLength>Of" />

欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

拷貝MDL中數(shù)據(jù)到緩沖區(qū)

系統(tǒng) 1986 0
    //Copy the packet into a buffer
  while (CurrentMdl && DataLength > 0)
    {
      NdisQueryMdl(CurrentMdl, &pSrc, &CurrLength, NormalPagePriority);
      if (pSrc == NULL)
        {
	  bytesCopied = 0;
	  break;
        }
        
      //
      //  Current buffer length is greater than the offset to the buffer
      //
      
      if (CurrLength > Offset)
        {
	  pSrc += Offset;
	  CurrLength -= Offset;
	  
	  if (CurrLength > DataLength)
            {
	      CurrLength = DataLength;
            }
	  DataLength -= CurrLength;
	  NdisMoveMemory(pDest, pSrc, CurrLength);
	  bytesCopied += CurrLength;
            
	  pDest += CurrLength;
	  Offset = 0;
        }
      else
        {
	  Offset -= CurrLength;
        }
      NdisGetNextMdl(CurrentMdl, &CurrentMdl);
      
    }
  

?

這段代碼就是拷貝數(shù)據(jù)到緩沖區(qū)。其中CurrMDL,offset和dataLength來(lái)自Net_Buffer:

    pNetBuffer = NET_BUFFER_LIST_FIRST_NB(pNetBufferList);
  
  //
  // Try to get the 1p data from OOB data
  //
  if(NET_BUFFER_LIST_INFO(pNetBufferList, Ieee8021QNetBufferListInfo) != 0)
    {
      Ndis8021QInfo.Value = NET_BUFFER_LIST_INFO(pNetBufferList, Ieee8021QNetBufferListInfo);
      UserPriority  = (UCHAR)Ndis8021QInfo.TagHeader.UserPriority;
    }     
  
  //copy the packet into a buffer
  pDest = packetBuffer;
  
  CurrentMdl = pNetBuffer->MdlChain;
  Offset = pNetBuffer->DataOffset;
  DataLength = pNetBuffer->DataLength;
  

?其中NET_BUFFER_LIST_FIRST_NB返回的是第一個(gè)Net_Buffer.? CurrentMDL指向MDL的list.現(xiàn)在來(lái)看看如何拷貝數(shù)據(jù)的。其中NdisQueryMdl返回MDL虛擬地址的基地址Psrc,和對(duì)應(yīng)的緩沖區(qū)長(zhǎng)度CurrLength

拷貝MDL中數(shù)據(jù)到緩沖區(qū)
?
?1、如果CurrLenght >?offset,那么把Psrc+offset,指向used data.同樣,CurrLength-offset,表示當(dāng)前的MDL中有用的數(shù)據(jù)長(zhǎng)度。然后執(zhí)行NdisMoveMemory的拷貝操作.緊接著把,dataLength-CurrLength,因?yàn)橐呀?jīng)拷貝好了一部分,然后再把offset置零,因?yàn)楝F(xiàn)在指針已經(jīng)到了可用數(shù)據(jù)區(qū)。

2、當(dāng)再次得到下一個(gè)MDL的Psrc,和CurrLength時(shí),因?yàn)閛ffset已經(jīng)=0,所以CurrLength肯定大于0,所以即使執(zhí)行PSrc+=offset, CurrLength-=offset.最后拷貝整個(gè)長(zhǎng)度的空間(以圖為例,不都是這樣!!),dataLength-CurrLength.

3、最后第三次得到pSrc,和CurrLength,但是CurrLength,已經(jīng)大于dataLength,所以只拷貝dataLength的長(zhǎng)度數(shù)據(jù)。就完成了所有數(shù)據(jù)拷貝。

4、但是如果第一次的時(shí)候offset>CurrLength,那么就是比如圖中第一個(gè)MDL為unused data區(qū),執(zhí)行offset-=CurrLength.如下圖:


拷貝MDL中數(shù)據(jù)到緩沖區(qū)
?

?這樣之后又回到了前面所說(shuō)的CurrLength>offset了。

這就是拷貝數(shù)據(jù)到緩沖區(qū)的過(guò)程。不知有何疏漏,或者錯(cuò)誤,見(jiàn)諒~
?

拷貝MDL中數(shù)據(jù)到緩沖區(qū)


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 毛片啪啪 | 久久爱成人网 | 超级碰在线视频 | 美国一级欧美三级 | 91亚洲国产成人久久精品网站 | 亚洲欧美另类综合 | 奇米影视小说 | 牛牛a级毛片在线播放 | 丝袜天堂| 国内精品视频在线观看 | 小视频在线观看免费 | 久草精品视频 | 男女下面一进一出无遮挡着 | 日韩免费在线观看视频 | 国产精品19禁在线观看2021 | 日本高清免费不卡在线 | 日本大片久久久高清免费看 | 日韩特级毛片 | 亚洲日本中文 | 色婷婷综合久久久中字幕精品久久 | 亚洲成人免费 | 亚洲综合日韩欧美一区二区三 | 小明永久免费视频 | 超碰在线观看97 | 国产在线中文字幕 | 牛票票全部晒票 | 五月婷婷丁香在线观看 | 91制服| 亚洲欧洲精品视频在线观看 | 狠狠干美女 | 欧美在线电影 | 999毛片| 日产一一到六区麻豆 | 日韩精品一区二区三区在线观看 | 中文字幕免费在线观看动作大片 | 麻豆传媒地址 | 久草干 | 五月色开心婷婷丁香在线 | 李欣汝| 国产成人精品一区二三区 | 欧美综合图区亚欧综合图区 |