ndis6是在windows vista及之後版本的windows引入的,這時ndis5的hook方式是無法使用的,msdn推薦的方式是使用過濾驅動,其實也可以使用intermediate(中間層驅動),下面談一下它們的利弊,還有一些原理性的東西:
1.為什麼ndis6不動ndis5的hook:
1.因為ndis6使用了新的函式集和新的資料結構,最重要的是net_buffer替代了ndis_packet,原先所有的使用ndis_packet的protocol或miniport驅動的介面函式從此完全被報廢。
其實對ndis6也是可以進行hook的,但不穩定,通過對open_block6等結構中的介面函式進行替換,可以對部分的協議驅動實現hook,注意:這幾個函式都是使用新的net_buffer結構來進行工作,其體函式名可以通過除錯看出來,名稱中包括list。有興趣的人可以試一下,總的來說,這些函式與結構的變化比較大,很多任務作方式都發生的變化,處理起來更加複雜。
2.im驅動和過濾驅動相比,有什麼利弊之分?
1.im有最好的通用性,可以在winxp,win2k,vista,win7中全面相容,但它對vista與win7中的支援,是通過在通訊函式中加入從ndis_packet至net_buffer轉換層實現,所以效能在win7下應該是反而減弱了。
2.過濾驅動是直接使用net_buffer來進行通訊的,這種方式會有更好效能,主要的原因是net_buffer使用了新的資料表示方法,避免的頻繁的記憶體複製。具體可以參考msdn。但很明顯,它無法支援winxp及之前的系統。
編寫NDIS驅動,完全控制網絡卡收發報文
在windows上面,利用網絡卡做自定義報文的收發,winpcap是唯一選擇,目前自己編寫驅動來實現相關功能的基本找不到。winpcap對於接收的報文只是複製,並不阻斷報文向作業系統提交,因此還是影響了作業系統,導致作業系統時不時的發出一些報文來,而這些報文又可能會干擾我們的測試過程,為了突破這個限...
驅動編寫與除錯 6
5 然後跟著我做 首先執行windbg,然後開啟虛擬機器客戶機,選中除錯模式 6 進入要除錯的系統後我們可以在windbg中用debug命令中的break對目標機進行中斷,用f5我們又可以恢復客戶機的執行。現在我們來除錯乙個驅動試試,吧剛才寫的驅動和應用檔案拷貝到虛擬客戶機中,在windbg中開啟驅...
利用Passthru開發NDIS驅動的一點心得
最近看了不少資料,利用passthru例項完成了乙個ndis過濾驅動,解決了一些問題,也總結了一些經驗。當然,老手就不適用了,純給新手看的。2 收包的函式,有2個,是ptreceive和ptreceivepacket,分別對應不同的情況。如果網絡卡驅動通知上層,已經收到乙個完整的包,那麼就會呼叫pt...