1. 程式人生 > >NDIS6過濾驅動的編寫

NDIS6過濾驅動的編寫

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及之前的系統。