在 NDIS6.0 以後,NDIS 支援了 NDIS 協議驅動。下面的章程介紹了 NDIS 協議驅動以及描述如何撰寫以及安裝 NDIS 協議驅動:
- Roadmap for Developing NDIS Protocol Drivers
- Introduction to NDIS Protocol Drivers
- Writing NDIS Protocol Drivers
- Protocol Driver Design Concepts
Introduction to NDIS Protocol Drivers
NDIS 協議驅動會在他的下界釋出一組 ProtocolXxx 函式。這類的協議驅動會與 NDIS 合作來達到發送與接收網路數據的目的。協議驅動會綁定(Bind)一個下層的 miniport driver (通常為網卡驅動)或是intermediate driver(中間層驅動: 對上釋出 MiniportXxx 介面給上層,對下則釋出 ProtocolXxx 函式,透過偽裝達到過濾的功能,通常可作為網路防火牆之用)。
Note 中間層驅動的上界(虛擬miniport)並不會管控實體裝置。實際上是由下層的miniport驅動來管理。
協議驅動總是使用 NDIS 所提供的函式與下層的 NDIS
驅動合作來完成網路數據的收發。舉例一個協議驅動擁有非連線型(connectionless)的下界(下層驅動為非連線型的媒體,如Ethernet)必須呼叫 NdisSendNetBufferLists 來對下層的 NDIS 驅動發送網路數據。協議驅動也可以呼叫NdisOidRequest 來查詢或是設定下層無連線驅動所支援的OIDs。當協議驅動擁有連線導向(connection-oriented)的下界(下層為連線導向的媒體,如ISDN)必須呼叫 NdisCoSendNetBufferLists 來對下層的 NDIS 驅動發送網路數據。協議驅動也可以呼叫
NdisCoOidRequest 查詢或是設定下層連線導向驅動所支援的
OIDs。
NDIS 還提供了一組隱藏了底層操作系統細節的 NdisXxx 函式。舉例,一個協議驅動可以呼叫 NdisInitializeEvent 來創造一個同步事件以及呼叫 NdisInitializeListHead
來創造一個鏈結串列。無論如何,協議去動也可以呼叫 kernel-mode
的例程(routine),例如 IoCreateDevice。更多訊息請看「Summary
of Kernel-Mode Support Routines」。協議驅動開發者應該比照其他的NDIS驅動使用相同的「programming considerations」來開發。
Writing
to NDIS Protocol Drivers
本文檔提供協議驅動操作的概述(搭配 NDIS6.0 以及之後的版本)。NDIS
協議驅動提供ProtocolXxx函式,NDIS
呼叫這類的函式進行初始操作。NDIS 提供 NdisXxx 函式,協議驅動呼叫這類的函式進行操作。下列的章程描述綁定狀態與操作,以及包含一些協議驅動操作的概述。
- Initializing a Protocol Driver
- Protocol Binding States and Operations
- Binding to an Adapter
- Unbinding from an Adapter
- Starting and Pausing a Binding
- Configuring Optional Protocol Driver Services
- Protocol Driver Send and Receive Operations
- Protocol Driver OID Requests
- Handling PnP Event Notifications in a Protocol Driver
- Handling Status Indications in a Protocol Driver
沒有留言:
張貼留言