初始化篩選驅動程式

篩選驅動程式初始化會在系統載入驅動程式之後立即發生。 將驅動程式載入篩選為系統服務。 系統可以隨時在載入迷你埠驅動程式之前、期間或之後載入篩選驅動程式。 NDIS 可以在篩選驅動程式所支援類型的迷你埠配接器變成可用且篩選驅動程式初始化完成之後,將篩選模組附加至迷你埠配接器。

當驅動程式堆疊啟動時,如果尚未載入篩選驅動程式,系統會載入篩選驅動程式。 如需啟動包含篩選模組之驅動程式堆疊的詳細資訊,請參閱 啟動驅動程式堆疊

篩選驅動程式載入之後,系統會呼叫驅動程式的 DriverEntry 常式。

系統會將兩個引數傳遞至 DriverEntry

  • 驅動程式物件的指標,由 I/O 系統所建立。

  • 登錄路徑的指標,指定儲存驅動程式特定參數的位置。

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

篩選驅動程式會將驅動程式物件傳遞至 NdisFRegisterFilterDriver 函 式,當它向 NDIS 註冊為篩選驅動程式時。 驅動程式可以使用登錄路徑來取得組態資訊。 如需如何存取篩選驅動程式組態資訊的詳細資訊,請參閱 存取篩選驅動程式的組態資訊

篩選驅動程式會從其DriverEntry常式呼叫NdisFRegisterFilterDriver。 篩選驅動程式會將NDIS_FILTER_DRIVER_CHARACTERISTICS結構傳遞至FilterCharacteristics參數的NdisFRegisterFilterDriver,以匯出一組FilterXxx函式。

NDIS_FILTER_DRIVER_CHARACTERISTICS 結構會指定必要和選擇性 FilterXxx 函式的進入點。 您可以略過某些選擇性函式。 如需略過函式的詳細資訊,請參閱 資料略過模式

呼叫 NdisFRegisterFilterDriver 的驅動程式必須準備好立即呼叫其任何 FilterXxx 函式。

NDIS_FILTER_DRIVER_CHARACTERISTICS 結構會指定這些必要 FilterXxx 函式的進入點:

FilterAttach

FilterDetach

FilterRestart

FilterPause

NDIS_FILTER_DRIVER_CHARACTERISTICS 結構會指定這些選擇性的進入點,且無法在執行時間 變更 FilterXxx 函式:

FilterSetOptions

FilterSetModuleOptions

FilterOidRequest

FilterOidRequestComplete

FilterStatus

FilterNetPnPEvent

FilterDevicePnPEventNotify

FilterCancelSendNetBufferLists

NDIS_FILTER_DRIVER_CHARACTERISTICS 結構會指定這些選擇性專案的預設進入點,並在執行時間 FilterXxx 函式中變更:

FilterSendNetBufferLists

FilterSendNetBufferListsComplete

FilterReturnNetBufferLists

FilterReceiveNetBufferLists

上述四個函式也會在 NDIS_FILTER_PARTIAL_CHARACTERISTICS 結構中定義。 此結構會指定可在執行時間變更的函式,方法是從FilterSetModuleOptions函式呼叫NdisSetOptionalHandlers函式。 如果篩選驅動程式會在執行時間變更這些部分特性,它必須提供 FilterSetModuleOptions的進入點。 每個篩選模組的部分特性可能不同。 如需詳細資訊,請參閱 啟動篩選模組

NDIS 會在呼叫 NdisFRegisterFilterDriver的內容中呼叫FilterSetOptions函式。 FilterSetOptions 向 NDIS 註冊選擇性服務。 如需詳細資訊,請參閱 設定選擇性篩選驅動程式服務

如果 呼叫 NdisFRegisterFilterDriver 成功,NDIS 會使用篩選驅動程式控制碼填入 NdisFilterDriverHandle 的變數。 篩選驅動程式會儲存此控制碼,稍後將此控制碼傳遞至 NDIS 函式,例如 NdisFDeregisterFilterDriver,需要篩選驅動程式控制碼做為輸入參數。 當驅動程式卸載時,它必須呼叫 NdisFDeregisterFilterDriver 函 式來釋放 NdisFRegisterFilterDriver所配置的驅動程式資源。

FilterSetOptions傳回之後,篩選模組會處於[中斷連結] 狀態。 NDIS 可以在呼叫 FilterSetOptions傳回之後,隨時呼叫篩選驅動程式的FilterAttach函式。 驅動程式會在 FilterAttach 函式中執行篩選模組特定的初始化。 如需將篩選模組附加至驅動程式堆疊的詳細資訊,請參閱 附加篩選模組

篩選驅動程式也會執行 DriverEntry中所需的任何其他驅動程式特定初始化。 篩選驅動程式必須釋放它在其 FilterDriverUnload 常式中配置的驅動程式特定資源。 如需詳細資訊,請參閱 卸載篩選驅動程式