初始化通訊協定驅動程式
系統會在載入驅動程式之後呼叫通訊協定驅動程式的 DriverEntry 常式。 通訊協定驅動程式會以系統服務的形式載入。 他們可以在迷你埠驅動程式載入之前、期間或之後隨時載入。
通訊協定驅動程式會在DriverEntry中配置驅動程式資源,並註冊ProtocolXxx函式。 這包括 CoNDIS 用戶端和獨立呼叫管理員。 若要向 NDIS 註冊其 ProtocolXxx 函式,通訊協定驅動程式會呼叫 NdisRegisterProtocolDriver 函 式。
如果驅動程式已成功註冊為 NDIS 通訊協定驅動程式,DriverEntry會傳回STATUS_SUCCESS或其相等的NDIS_STATUS_SUCCESS。 如果 DriverEntry 透過傳播 NdisXxx 函式或核心模式支援常式所傳回的錯誤狀態而失敗初始化,驅動程式將不會繼續載入。 DriverEntry 必須同步執行;也就是說,它無法傳回STATUS_PENDING或其對等NDIS_STATUS_PENDING。
NDIS 通訊協定驅動程式的 DriverEntry 函式必須呼叫 NdisRegisterProtocolDriver 函 式。 若要向 NDIS 程式庫註冊驅動程式的 ProtocolXxx 進入點,通訊協定驅動程式會初始化 NDIS_PROTOCOL_DRIVER_CHARACTERISTICS 結構,並將其傳遞至 NdisRegisterProtocolDriver。
呼叫 NdisRegisterProtocolDriver 的驅動程式必須準備好立即呼叫其任何 ProtocolXxx 函式。
NDIS 通訊協定驅動程式提供下列 ProtocolXxx 函式,這些函式是舊版驅動程式所提供的更新版本:
ProtocolCloseAdapterCompleteEx
NDIS 通訊協定驅動程式提供下列 ProtocolXxx 函式來傳送和接收作業:
ProtocolSendNetBufferListsComplete
所有類型的 NDIS 通訊協定驅動程式都應該註冊功能完整的ProtocolBindAdapterEx和ProtocolUnbindAdapterEx函式,以支援 隨插即用 (PnP) 。 一般而言, DriverEntry 函式應該在傳回狀態值為 STATUS_SUCCESS 或 NDIS_STATUS_SUCCESS 的控制項之前,立即呼叫 NdisRegisterProtocolDriver 。
除了 NDIS 定義的 ProtocolXxx 函式之外,匯出一組標準核心模式驅動程式常式的任何通訊協定驅動程式,都必須在傳入至 DriverEntry 函式的指定驅動程式物件中,設定這些驅動程式常式的進入點。 如需這類通訊協定驅動程式 DriverEntry 函式功能的詳細資訊,請參閱 撰寫 DriverEntry 常式。
如果嘗試配置驅動程式執行網路 I/O 作業所需的資源失敗, DriverEntry 應該先釋放它已配置的所有資源,然後再傳回具有STATUS_SUCCESS或NDIS_STATUS_SUCCESS以外的狀態。
如果在成功呼叫 NdisRegisterProtocolDriver之後發生錯誤,驅動程式必須在DriverEntry傳回之前呼叫NdisDeregisterProtocolDriver 函式。
若要允許通訊協定驅動程式設定選擇性服務,NDIS 會在通訊協定驅動程式對NdisRegisterProtocolDriver的呼叫內容中呼叫ProtocolSetOptions函式。 如需選擇性服務的詳細資訊,請參閱 設定選擇性通訊協定驅動程式服務。
CoNDIS 用戶端驅動程式必須從ProtocolSetOptions函式呼叫NdisSetOptionalHandlers函式。 驅動程式會初始化NDIS_CO_CLIENT_OPTIONAL_HANDLERS結構,並將其傳遞至NdisSetOptionalHandlers的OptionalHandlers參數。
CoNDIS 獨立呼叫管理員也必須從ProtocolSetOptions函式呼叫NdisSetOptionalHandlers函式。 驅動程式會初始化NDIS_CO_CALL_MANAGER_OPTIONAL_HANDLERS結構,並將其傳遞至NdisSetOptionalHandlers的OptionalHandlers參數。
MCM 不是通訊協定驅動程式。 因此,他們必須從MiniportSetOptions函式呼叫NdisSetOptionalHandlers函式。 MCM 會初始化NDIS_CO_CALL_MANAGER_OPTIONAL_HANDLERS結構,並將其傳遞至NdisSetOptionalHandlers的OptionalHandlers參數。
若要向 NDIS 取消註冊,通訊協定驅動程式會從其Unload常式呼叫NdisDeregisterProtocolDriver。
若要在卸載通訊協定驅動程式之前執行清除作業,通訊協定驅動程式可以註冊 ProtocolUninstall 函式。 ProtocolUninstall函式是選擇性的。 例如,中繼驅動程式的通訊協定下邊緣可能需要 ProtocolUninstall 函式。 中繼驅動程式可以在 ProtocolUninstall 中釋放其通訊協定邊緣資源,然後 NDIS 呼叫 其 MiniportDriverUnload 函式。