Condividi tramite


Inizializzazione di un driver di filtro

L'inizializzazione del driver di filtro si verifica immediatamente dopo che il sistema carica il driver. Filtrare il carico dei driver come servizi di sistema. Il sistema può caricare i driver di filtro in qualsiasi momento prima, durante o dopo il caricamento dei driver miniport. NDIS può collegare un modulo di filtro a una scheda miniport dopo che un adattatore miniport del tipo supportato dal driver di filtro diventa disponibile e l'inizializzazione del driver di filtro è completata.

Durante l'avvio di uno stack di driver, il sistema carica i driver di filtro se non sono già caricati. Per altre informazioni sull'avvio di uno stack di driver che include moduli di filtro, vedere Avvio di uno stack di driver.

Dopo il caricamento di un driver di filtro, il sistema chiama la routine DriverEntry del driver.

Il sistema passa due argomenti a DriverEntry:

  • Puntatore all'oggetto driver, creato dal sistema di I/O.

  • Puntatore al percorso del Registro di sistema, che specifica dove vengono archiviati parametri specifici del driver.

DriverEntry restituisce STATUS_SUCCESS o il relativo NDIS_STATUS_SUCCESS equivalente, se il driver è stato registrato correttamente come driver di filtro NDIS. Se DriverEntry non riesce l'inizializzazione propagando uno stato di errore restituito da una funzione NdisXxx o da una routine di supporto in modalità kernel, il driver non rimarrà caricato. DriverEntry deve eseguire in modo sincrono; ovvero, non può restituire STATUS_PENDING o il relativo NDIS_STATUS_PENDING equivalente.

Il driver di filtro passa l'oggetto driver alla funzione NdisFRegisterFilterDriver quando viene registrato con NDIS come driver di filtro. Il driver può usare il percorso del Registro di sistema per ottenere informazioni di configurazione. Per altre informazioni su come accedere alle informazioni di configurazione del driver di filtro, vedere Accesso alle informazioni di configurazione per un driver di filtro.

Un driver di filtro chiama NdisFRegisterFilterDriver dalla routine DriverEntry . I driver di filtro esportano un set di funzioni FilterXxx passando una struttura NDIS_FILTER_DRIVER_CHARACTERISTICS a NdisFRegisterFilterDriver nel parametro FilterCharacteristics .

La struttura NDIS_FILTER_DRIVER_CHARACTERISTICS specifica i punti di ingresso per le funzioni FilterXxx obbligatorie e facoltative. Alcune funzioni facoltative possono essere ignorate. Per altre informazioni sul bypass delle funzioni, vedere Modalità bypass dei dati.

I driver che chiamano NdisFRegisterFilterDriver devono essere preparati per una chiamata immediata a una qualsiasi delle funzioni FilterXxx .

La struttura NDIS_FILTER_DRIVER_CHARACTERISTICS specifica i punti di ingresso per queste funzioni FilterXxx obbligatorie:

FilterAttach

FilterDetach

FilterRestart

FilterPause

La struttura NDIS_FILTER_DRIVER_CHARACTERISTICS specifica i punti di ingresso per questi elementi facoltativi e non modificabili in fase di esecuzione, funzioni FilterXxx :

FilterSetOptions

FilterSetModuleOptions

FilterOidRequest

FilterOidRequestComplete

FilterStatus

FilterNetPnPEvent

FilterDevicePnPEventNotify

FilterCancelSendNetBufferLists

La struttura NDIS_FILTER_DRIVER_CHARACTERISTICS specifica i punti di ingresso predefiniti per questi elementi facoltativi e modificabili in fase di esecuzione, funzioni FilterXxx :

FilterSendNetBufferLists

FilterSendNetBufferListsComplete

FilterReturnNetBufferLists

FilterReceiveNetBufferLists

Le quattro funzioni precedenti vengono definite anche nella struttura NDIS_FILTER_PARTIAL_CHARACTERISTICS . Questa struttura specifica le funzioni che possono essere modificate in fase di esecuzione chiamando la funzione NdisSetOptionalHandlers dalla funzione FilterSetModuleOptions . Se un driver di filtro modifica queste caratteristiche parziali in fase di esecuzione, deve fornire il punto di ingresso per FilterSetModuleOptions. Le caratteristiche parziali possono essere diverse per ogni modulo di filtro. Per altre informazioni, vedere Avvio di un modulo filtro.

NDIS chiama la funzione FilterSetOptions nel contesto della chiamata a NdisFRegisterFilterDriver. FilterSetOptions registra i servizi facoltativi con NDIS. Per altre informazioni, vedere Configurazione di Servizi driver di filtro facoltativi.

Se la chiamata a NdisFRegisterFilterDriver riesce, NDIS riempie la variabile in NdisFilterDriverHandle con un handle del driver di filtro. Il driver di filtro salva questo handle e in seguito passa questo handle alle funzioni NDIS, ad esempio NdisFDeregisterFilterDriver, che richiedono un handle del driver di filtro come parametro di input. Quando il driver scarica, deve chiamare la funzione NdisFDeregisterFilterDriver per rilasciare le risorse del driver allocate da NdisFRegisterFilterDriver.

Dopo aver restituito FilterSetOptions , i moduli di filtro si trovano nello stato Scollegato . NDIS può chiamare la funzione FilterAttach del driver di filtro in qualsiasi momento dopo la chiamata a FilterSetOptions . Il driver esegue l'inizializzazione specifica del modulo del modulo nella funzione FilterAttach . Per altre informazioni sul collegamento di un modulo di filtro a uno stack di driver, vedere Collegamento di un modulo filtro.

Un driver di filtro esegue anche qualsiasi altra inizializzazione specifica del driver necessaria in DriverEntry. Il driver di filtro deve rilasciare le risorse specifiche del driver allocati nella routine FilterDriverUnload . Per altre informazioni, vedere Scaricare un driver di filtro.