• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            Ay's Blog@CNSSUESTC

            個(gè)人總結(jié)NDIS中NDIS_PACKET,NDIS_BUFFER的關(guān)系

            ?1?//???
            ?2?//?NDIS_PACKET結(jié)構(gòu)的定義??
            ?3?//???
            ?4?typedef?struct?_NDIS_PACKET??
            ?5?{??
            ?6?NDIS_PACKET_PRIVATE?Private;??
            ?7?//這個(gè)其實(shí)是一個(gè)鏈表結(jié)構(gòu),Private.Head指向第一個(gè)鏈表,Private.Tail指向最后一個(gè)??
            ?8?//以下有關(guān)于這個(gè)結(jié)構(gòu)的解釋??
            ?9?
            10?union??
            11?{??
            12?struct?//?For?Connection-less?miniports???
            13?{??
            14?UCHAR?MiniportReserved[2*sizeof(PVOID)];??
            15?UCHAR?WrapperReserved[2*sizeof(PVOID)];??
            16?};??
            17?
            18?struct??
            19?{??
            20?//???
            21?//?For?de-serialized?miniports.?And?by?implication?conn-oriented?miniports.???
            22?//?This?is?for?the?send-path?only.?Packets?indicated?will?use?WrapperReserved???
            23?//?instead?of?WrapperReservedEx???
            24?//???
            25?UCHAR?MiniportReservedEx[3*sizeof(PVOID)];??
            26?UCHAR?WrapperReservedEx[sizeof(PVOID)];??
            27?};??
            28?
            29?struct??
            30?{??
            31?UCHAR?MacReserved[4*sizeof(PVOID)];??
            32?};??
            33?};??
            34?
            35?ULONG_PTR?Reserved[2];?//?For?compatibility?with?Win95???
            36?UCHAR?ProtocolReserved[1];??
            37?
            38?}?NDIS_PACKET,?*PNDIS_PACKET,?**PPNDIS_PACKET;??
            39?
            40?//?NDIS_PACKET_PRIVATE?的定義??
            41?typedef?struct?_NDIS_PACKET_PRIVATE??
            42?{??
            43?UINT?PhysicalCount;?//?number?of?physical?pages?in?packet.???
            44?UINT?TotalLength;?//?Total?amount?of?data?in?the?packet.???
            45?PNDIS_BUFFER?Head;?//?鏈表指針,指向第一個(gè)?
            46?PNDIS_BUFFER?Tail;?//?鏈表指針,指向最后一個(gè)??
            47?
            48?//?if?Head?is?NULL?the?chain?is?empty;?Tail?doesn\'t?have?to?be?NULL?also???
            49?
            50?PNDIS_PACKET_POOL?Pool;?//?so?we?know?where?to?free?it?back?to???
            51?UINT?Count;??
            52?ULONG?Flags;??
            53?BOOLEAN?ValidCounts;??
            54?UCHAR?NdisPacketFlags;?//?See?fPACKET_xxx?bits?below???
            55?USHORT?NdisPacketOobOffset;??
            56?}?NDIS_PACKET_PRIVATE,?*?PNDIS_PACKET_PRIVATE;??
            57?
            58?//NDIS_BUFFER定義?其實(shí)就是一個(gè)內(nèi)存描述符
            59?
            60?typedef?struct?_NDIS_BUFFER?{??
            61?struct?_NDIS_BUFFER?*Next;?//指向下一個(gè)節(jié)點(diǎn)的指針
            62?PVOID?VirtualAddress;??????//指向報(bào)文首地址
            63?PNDIS_BUFFER_POOL?Pool;??
            64?UINT?Length;???????????????//報(bào)文數(shù)據(jù)長(zhǎng)度
            65?UINT?Signature;??
            66?}?NDIS_BUFFER,?*?PNDIS_BUFFER;??

            注釋寫(xiě)的很清楚了??那么他們的關(guān)系還是不清楚的話看看附圖



            ? 好了??這樣一來(lái)我們的思路大概清楚了??NDIS_PACKET只不過(guò)是一個(gè)關(guān)于NDIS_BUFFER鏈表的結(jié)構(gòu)??在NDIS_PACKET中的成 員Private中有指向第一個(gè)NDIS_BUFFER的指針和指向最后一個(gè)NDIS_BUFFER的指針??分別是Private.Head 和Private.Tail? ???而NDIS_BUFFER中就記錄了我們數(shù)據(jù)包的地址和下一個(gè)NDIS_BUFFER的地址? ?操作有很多種方法? ?由于這些結(jié)構(gòu)體本來(lái)對(duì)我們是不透明的? ? 所以最安全的方法是用MS提供的一系列函數(shù)來(lái)操作NDIS_PACKET和NDIS_BUFFER??

            ? ? 還是拿個(gè)例子好說(shuō)話吧

            ?1?NDIS_STATUS?status?;
            ?2?????PNDIS_BUFFER?NdisBuffer?;
            ?3?????UINT?TotalPacketLength?=?0?,?copysize?=?0?,?DataOffset?=?0?,?PhysicalBufferCount??,??BufferCount???;
            ?4?????PUCHAR?mybuffer?=?NULL?,tembuffer?=?NULL?;??
            ?5?
            ?6?//假設(shè)這個(gè)是在PtReceive等函數(shù)中得到的PACKET
            ?7?NdisQueryPacket(packet?????????????????????//我們先得到第一個(gè)NDISBUFFER?的指針???
            ?8?????????,?&PhysicalBufferCount??????????????
            ?9?????????,?&BufferCount???????????????????????????
            10?????????,&NdisBuffer???????????????????????????????//NdisBuffer就是指向鏈表頭
            11?????????,?&TotalPacketLength
            12?????????);
            13?/*
            14?其實(shí)也可以不用那么麻煩?直接??NdisBuffer?=?packet->Private.Head?;就可以取得第一個(gè)BUFFER了
            15?*/
            16?
            17?????status?=?NdisAllocateMemory(?&mybuffer,?2048,?0,?HighestAcceptableMax?);??//分配我們自己的內(nèi)存塊
            18?
            19?????if(?status?!=?NDIS_STATUS_SUCCESS?)
            20?????????return?NDIS_STATUS_FAILURE?;
            21?
            22?????NdisZeroMemory(?mybuffer,?2048?)?;
            23?
            24?????NdisQueryBufferSafe(??//取得NDIS_BUFFER描述符中數(shù)據(jù)的首地址和大小
            25?????????????????????????????????NdisBuffer,
            26?????????????????????????????????&tembuffer,
            27?????????????????????????????????&copysize,
            28?????????????????????????????????NormalPagePriority
            29?????);??
            30??????
            31?????????//將數(shù)據(jù)復(fù)制到我們的內(nèi)存中
            32?????NdisMoveMemory(mybuffer,?tembuffer,?copysize)?;
            33?
            34?????DataOffset?=?copysize?;
            35?
            36?????while(1)
            37?????{
            38?????????/*
            39?????????????????也可以這樣操作而不用NdisGetNextBuffer
            40?????????if(NdisBuffer->Next?==?packet->Private.Tail?)
            41?????????????break?;
            42?
            43?????????NdisBuffer?=?NdisBuffer->Next?;
            44?
            45?????????if(pmdl?==?NULL?)
            46????????????break?;
            47????????????*/
            48?????????//獲得下一個(gè)NDIS_BUFFER的的指針
            49?????NdisGetNextBuffer(NdisBuffer?,?&NdisBuffer?)?;
            50?????????如果指針是NULL??那么表示到鏈表尾了
            51?????if(?NdisBuffer?==?NULL?)
            52?????????break?;
            53?
            54?????NdisQueryBufferSafe(
            55?????????????????????????????????NdisBuffer,
            56?????????????????????????????????&tembuffer,
            57?????????????????????????????????&copysize,
            58?????????????????????????????????NormalPagePriority
            59?????????????????????????????????)?;
            60?
            61?????NdisMoveMemory(?mybuffer?+?DataOffset?,?tembuffer,?copysize)?;
            62?
            63?????DataOffset?+=?copysize??;
            64?
            65?????}
            66?
            67?//OK??我們要的數(shù)據(jù)就全部都在我們申請(qǐng)的內(nèi)存mybuffer?數(shù)據(jù)大小為DataOffset

            ???
            ?

            posted on 2008-09-18 23:25 __ay 閱讀(2930) 評(píng)論(13)  編輯 收藏 引用 所屬分類: 操作系統(tǒng)&&內(nèi)核

            Feedback

            # re: 個(gè)人總結(jié)NDIS中NDIS_PACKET,NDIS_BUFFER的關(guān)系 2009-02-12 15:01 NUMBY

            不錯(cuò)哈,計(jì)院哪個(gè)年級(jí)的呢?在學(xué)習(xí)NDIS編程么?方便的話給個(gè)QQ交流吧,我的郵箱是zhangx,后面是@學(xué)校域名.  回復(fù)  更多評(píng)論   

            # re: 個(gè)人總結(jié)NDIS中NDIS_PACKET,NDIS_BUFFER的關(guān)系 2009-02-12 15:55 __ay

            @NUMBY
            呵呵 我只做到了通過(guò)NDIS截獲數(shù)據(jù)包而已 更深層次的一些操作我沒(méi)怎么深入研究 你也是UESTC的?如果你需要我可以把一些學(xué)習(xí)資料給你 以前我學(xué)習(xí)的時(shí)候積累下來(lái)的 嘻嘻  回復(fù)  更多評(píng)論   

            # re: 個(gè)人總結(jié)NDIS中NDIS_PACKET,NDIS_BUFFER的關(guān)系 2009-02-12 17:18 NUMBY

            @__ay
            是的,我在學(xué)院軟件工程研究中心,給我發(fā)封信吧,給個(gè)QQ號(hào)交流一下。  回復(fù)  更多評(píng)論   

            # re: 個(gè)人總結(jié)NDIS中NDIS_PACKET,NDIS_BUFFER的關(guān)系 2009-02-28 13:35 jakiejia

            @__ay
            您好,我想學(xué)習(xí)一下ndis,但是不知道從何入手,希望您能把一些學(xué)習(xí)資料給我一份,謝謝您 jakiejia@163.com@__ay
              回復(fù)  更多評(píng)論   

            # re: 個(gè)人總結(jié)NDIS中NDIS_PACKET,NDIS_BUFFER的關(guān)系 2009-06-22 17:49 陳陸艷

            大牛,你好,我也正在學(xué)NDIS截包,但是現(xiàn)在還不知道如何著手,看了你的文檔后明白了一些,你可以把你截包的資料發(fā)給我一下嗎?非常感謝,我也是某學(xué)校的學(xué)生,謝謝你了!我的郵箱:chen_happy09@163.com  回復(fù)  更多評(píng)論   

            # re: 個(gè)人總結(jié)NDIS中NDIS_PACKET,NDIS_BUFFER的關(guān)系 2009-06-22 19:40 __ay

            @陳陸艷
            談不上大牛.... 只不過(guò)怕忘記做了些筆記而已 資料發(fā)給你了 有問(wèn)題可以交流交流的 呵呵........  回復(fù)  更多評(píng)論   

            # re: 個(gè)人總結(jié)NDIS中NDIS_PACKET,NDIS_BUFFER的關(guān)系 2009-06-23 20:28 陳陸艷

            PNDIS_BUFFER Tail; // 鏈表指針,指向前面一個(gè) ,,這個(gè)應(yīng)該是指向最后一塊buffer的指針吧  回復(fù)  更多評(píng)論   

            # re: 個(gè)人總結(jié)NDIS中NDIS_PACKET,NDIS_BUFFER的關(guān)系 2009-06-23 22:00 __ay

            @陳陸艷
            恩恩 對(duì) 哈哈 寫(xiě)錯(cuò)了 改過(guò)來(lái)了~~多謝多謝   回復(fù)  更多評(píng)論   

            # re: 個(gè)人總結(jié)NDIS中NDIS_PACKET,NDIS_BUFFER的關(guān)系 2009-09-11 16:58 小黃

            能給我一份NDIS的學(xué)習(xí)資料嗎?

            我郵箱h275531513@hotmail.com
            謝謝了  回復(fù)  更多評(píng)論   

            # re: 個(gè)人總結(jié)NDIS中NDIS_PACKET,NDIS_BUFFER的關(guān)系 2010-02-02 15:36 小鵬

            @小黃
            希望給我一份,可以學(xué)習(xí)下  回復(fù)  更多評(píng)論   

            # re: 個(gè)人總結(jié)NDIS中NDIS_PACKET,NDIS_BUFFER的關(guān)系 2010-03-01 11:07 小鵬

            @__ay
            可以把資料給我一點(diǎn)不  回復(fù)  更多評(píng)論   

            # re: 個(gè)人總結(jié)NDIS中NDIS_PACKET,NDIS_BUFFER的關(guān)系 2010-09-28 10:28 黃美娟

            你好!高手,小妹我正在學(xué)習(xí)NDIS。老師讓做Demo,希望能得到你的資料!謝謝,請(qǐng)留下QQ號(hào),方便交流!xianren2440@sina.com  回復(fù)  更多評(píng)論   

            # re: 個(gè)人總結(jié)NDIS中NDIS_PACKET,NDIS_BUFFER的關(guān)系 2010-11-11 12:49 劉君來(lái)

            最近在做NDIS Miniport驅(qū)動(dòng)相關(guān)的東西,看了你的文章受益匪淺,能不能告訴我你的聯(lián)系方式,我想跟你交流一下。
            我的郵箱:csu_zhaojunzhi@163.com  回復(fù)  更多評(píng)論   


            精品无码久久久久国产| 久久久无码精品亚洲日韩软件| 久久婷婷色香五月综合激情| 久久免费大片| 99热成人精品热久久669| 国产精品久久99| 亚洲伊人久久成综合人影院 | 一本色道久久88综合日韩精品 | 欧美成a人片免费看久久| 亚洲伊人久久大香线蕉综合图片| 国产精品欧美久久久天天影视 | 国产精品久久久亚洲| 久久亚洲中文字幕精品一区四 | 人妻无码αv中文字幕久久琪琪布| 91精品国产综合久久四虎久久无码一级 | 嫩草伊人久久精品少妇AV| 91精品国产色综久久| 粉嫩小泬无遮挡久久久久久| 午夜肉伦伦影院久久精品免费看国产一区二区三区 | 久久夜色tv网站| 97久久婷婷五月综合色d啪蜜芽| 久久精品国产69国产精品亚洲| 免费无码国产欧美久久18| 免费一级欧美大片久久网 | 久久亚洲AV成人无码软件| 韩国三级中文字幕hd久久精品| 色88久久久久高潮综合影院| 久久无码AV中文出轨人妻| 狠狠精品久久久无码中文字幕 | 色欲av伊人久久大香线蕉影院| 亚洲精品成人久久久| 日本久久中文字幕| 久久精品国产亚洲AV不卡| 国产999精品久久久久久| 青青草国产精品久久| 欧美久久综合性欧美| 久久精品国产亚洲麻豆| 热久久这里只有精品| 99久久精品久久久久久清纯| 香蕉久久夜色精品国产小说| 久久av高潮av无码av喷吹|