共用方式為


初始化中繼驅動程式

NDIS 中繼驅動程式會在其 DriverEntry 例程的內容中註冊其 MiniportXxx 函式及其 ProtocolXxx 函式。 若要註冊其 MiniportXxx 函式,中繼驅動程式必須呼叫已設定NDIS_INTERMEDIATE_DRIVER旗標的 NdisMRegisterMiniportDriver 函式。 此旗標位於驅動程式透過 MiniportDriverCharacteristics傳遞的 NDIS_MINIPORT_DRIVER_CHARACTERISTICS 結構中。 若要註冊其 ProtocolXxx 函式,中繼驅動程式必須呼叫 NdisRegisterProtocolDriver 函式。

如果驅動程式成功註冊為 NDIS 中繼驅動程式,DriverEntry 會傳回STATUS_SUCCESS或其對等NDIS_STATUS_SUCCESS。 如果 DriverEntry 因傳播由 NdisXxx 函式或內核模式支援例程所傳回的錯誤狀態而導致初始化失敗,驅動程式將不會繼續載入。 DriverEntry 必須同步執行;也就是說,它無法傳回STATUS_PENDING或其對等NDIS_STATUS_PENDING。

若要向 NDIS 註冊中繼驅動程式,DriverEntry 例程至少必須:

  • 呼叫 NdisMRegisterMiniportDriver 函式,並將 NDIS_INTERMEDIATE_DRIVER 旗標設定為註冊驅動程式的 MiniportXxx 函式。
  • 如果驅動程式後續系結至基礎 NDIS 驅動程式,請呼叫 NdisRegisterProtocolDriver 函式來註冊驅動程式的 ProtocolXxx 函式。
  • 呼叫 NdisIMAssociateMiniport 函式,以通知 NDIS 關於驅動程式微型埠上層邊界與協定下層邊界之間的關聯。

如果在 NdisMRegisterMiniportDriver 成功傳回之後,DriverEntry 發生錯誤,驅動程式必須在 DriverEntry 傳回之前呼叫 NdisMDeregisterMiniportDriver 函式。 如果 DriverEntry 成功,驅動程式必須在其 MiniportDriverUnload 函式中呼叫 NdisMDeregisterMiniportDriver

中繼驅動程式會共用通訊協定驅動程式和迷你埠驅動程式的大部分 DriverEntry 需求。

當驅動程式從其 ProtocolBindAdapterEx 函式呼叫 NdisIMInitializeDeviceInstanceEx 函式時,就會初始化中繼驅動程式的虛擬迷你埠。

NDIS 會在所有基礎迷你埠驅動程式初始化之後,呼叫 ProtocolBindAdapterEx 函式。

實際上,NDIS 中繼驅動程式的 DriverEntry 函式可以在將它傳遞至 NdisMRegisterMiniportDriver之後,忽略 RegistryPath 指標。 這類驅動程式也可以在將它傳遞至 NdisMRegisterMiniportDriver之後,忽略 DriverObject 指標。 不過,驅動程式應該在 NdisMiniportDriverHandle 儲存由 NdisMRegisterMiniportDriver 傳回的迷你埠驅動程式 Handle 值,以及在 NdisProtocolHandle 儲存由 NdisRegisterProtocolDriver 傳回的通訊協定 Handle 值,以便後續呼叫 NdisXxx 函式。 中繼驅動程式的 ProtocolBindAdapterEx 函式會先將驅動程式系結至每個基礎迷你埠驅動程式,再呼叫其 MiniportInitializeEx 函式,以初始化中繼驅動程式的虛擬迷你埠。 更高層級的通訊協定驅動程式隨後會自行系結至它所建立的虛擬迷你埠。 此策略可讓 NDIS 中繼驅動程式根據所系結基礎迷你埠驅動程式的功能,在建立虛擬迷你埠時配置資源。