基于Passthru的NDIS开发的个人理解
這幾天對NDIS的學習,基本思路是:首先熟悉理論知識→然后下載一個例子進行研究→最后例子自己模仿擴展→最最后嘗試自己寫一個新的。
Passthru是微軟NDIS自己寫的一個框架驅動,NDIS開發(fā)者可以在此框架上進行擴展,做二次開發(fā)。
NDIS提供一些基本操作函數(shù),Passthru里的函數(shù)就是使用的這些基本函數(shù)做成的一個網(wǎng)絡驅動。
基于Passthru的擴展就是自己在此驅動的基礎上在封裝一次,比如說為MyPassthru,將NDIS里面的函數(shù)封裝在自己自定義函數(shù)里,方便外界調用。
最主要的函數(shù)就是NDIS里面的PtReceive或PtReceivePacket(負責網(wǎng)絡封包的接收) ,MPSend或MPSendPacket(負責發(fā)送上層準備發(fā)送到網(wǎng)絡的數(shù)據(jù)包),這四個回調函數(shù)是封包截獲和過濾的關鍵。
總體上,基于NDIS的程序分為應用程序、驅動程序以及兩者的通信三大部分:
(1)基于NDIS 中間層的驅動程序(passthru.sys)
該程序運行于內核態(tài),主要有以下功能模塊:
A. 網(wǎng)絡封包截獲,在數(shù)據(jù)鏈路層和網(wǎng)絡層之間捕獲所有接收到的封包
B. 網(wǎng)絡封包過濾,根據(jù)過濾規(guī)則,決定每一個封包的行為(放行或丟棄)
C. 網(wǎng)絡封包發(fā)送,將用戶構造的封包發(fā)送至網(wǎng)絡中
(2)應用層的測試程序(NdisDemo.exe)
應用程序主要起著控制驅動程序行為的作用,主要有以下功能模塊:
A. 封包解析,對底層的封包進行分析
B. 驅動設置,控制驅動的的行為,如緩沖數(shù)量、過濾規(guī)則等
C. 封包構造,構造任意數(shù)據(jù)包,并控制驅動程序發(fā)送該封包
(3)驅動程序與應用程序之間的通信
A. 本文采用文獻中介紹的共享內存方式。應用層在獲取共享內地址后,可以直接對內存進行操作,從而減少了數(shù)據(jù)復制的次數(shù);
B. 為減少應用程序在對數(shù)據(jù)包解析時,驅動程序發(fā)生丟包現(xiàn)象,在內核中申請一個比較大的緩沖區(qū)(作為共享內存),通過循環(huán)隊列的方式對緩沖區(qū)進行存取操作;
C. 為進一步提高效率,驅動程序在緩存一定數(shù)量之后,才以事件的方式通知應用程序。同時采用定時器的機制,保證所有數(shù)據(jù)能被應用程序讀取。
其中第一部分只需開發(fā)者了解明白即可,關鍵是處理第二、三部分和這三者之間的聯(lián)系。
當然,第二部分只是一個例子,你也可以寫成自己的一個庫,到時是具體的應用程序直接調用庫。?
轉載于:https://www.cnblogs.com/RodYang/p/3221190.html
總結
以上是生活随笔為你收集整理的基于Passthru的NDIS开发的个人理解的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 测试——设计思维之获取反馈
- 下一篇: 精确JS乘除法
