初始化中繼驅動程式
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指標。 不過,驅動程式應該儲存 NdisMRegisterMiniportDriver 在 NdisMiniportDriverHandle 所傳回的迷你埠驅動程式控制碼值,以及 NdisRegisterProtocolDriver 在 NdisProtocolHandle 傳回的通訊協定控制碼值,以便後續呼叫 NdisXxx 函式。 中繼驅動程式的 ProtocolBindAdapterEx 函式會在呼叫其 MiniportInitializeEx 函式之前,先將驅動程式系結至每個基礎迷你埠驅動程式,以初始化中繼驅動程式的虛擬迷你埠。 仍然較高層級的通訊協定驅動程式會接著將自己系結至它所建立的虛擬迷你埠。 此策略可讓 NDIS 中繼驅動程式根據所系結基礎迷你埠驅動程式的功能,在建立虛擬迷你埠時配置資源。