共用方式為


初始化通訊協定驅動程式

系統會在載入驅動程序之後呼叫通訊協定驅動程式的 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 函式,這些函式是舊版驅動程式所提供的更新版本:

協議選項設置

ProtocolBindAdapterEx

ProtocolUnbindAdapterEx

ProtocolOpenAdapterCompleteEx

ProtocolCloseAdapterCompleteEx

ProtocolNetPnPEvent

協議卸載

NDIS 通訊協定驅動程式提供下列 ProtocolXxx 函式來傳送和接收作業:

ProtocolReceiveNetBufferLists

ProtocolSendNetBufferListsComplete

所有類型的 NDIS 通訊協定驅動程式都應該註冊功能完整的 ProtocolBindAdapterExProtocolUnbindAdapterEx 函式,以支援隨插即用 (PnP)。 一般而言,DriverEntry 函式應該立即呼叫 NdisRegisterProtocolDriver,然後才傳回狀態值為 STATUS_SUCCESS 或 NDIS_STATUS_SUCCESS 的控件。

除了其 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 結構,並將它傳遞至 NdisSetOptionalHandlersOptionalHandlers 參數。

CoNDIS 獨立呼叫管理員也必須從 ProtocolSetOptions 函式中呼叫 NdisSetOptionalHandlers 函式。 驅動程式會初始化 NDIS_CO_CALL_MANAGER_OPTIONAL_HANDLERS 結構,並將其作為 NdisSetOptionalHandlersOptionalHandlers 參數傳遞。

MCM 不是通訊協定驅動程式。 因此,他們必須從 MiniportSetOptions 函式呼叫 NdisSetOptionalHandlers 函式。 MCM 會初始化 NDIS_CO_CALL_MANAGER_OPTIONAL_HANDLERS 結構,並在 NdisSetOptionalHandlersOptionalHandlers 參數中傳遞該結構。

若要解除 NDIS 的註冊,協定驅動程式會在其 Unload 例程中呼叫 NdisDeregisterProtocolDriver

若要在卸載通訊協定驅動程式之前執行清除作業,通訊協定驅動程式可以註冊 ProtocolUninstall 函式。 ProtocolUninstall 函式是選擇性的。 例如,中繼驅動程式的通訊協定下邊緣可能需要 ProtocolUninstall 函式。 中繼驅動程式可以在 ProtocolUninstall 中釋放其通訊協定邊緣資源,然後 NDIS 呼叫其 MiniportDriverUnload 函式。