Avvio di un modulo di filtro
Per avviare un modulo di filtro sospeso, NDIS chiama la funzione FilterSetModuleOptions del driver di filtro, se presente, seguita da una chiamata alla funzione FilterRestart . Il modulo di filtro entra nello stato Restarting all'inizio dell'esecuzione nella funzione FilterRestart .
Se il driver ha fornito un punto di ingresso per FilterSetModuleOptions, il driver può modificare la caratteristica parziale per un modulo di filtro. Per altre informazioni, vedere Modalità bypass dati.
Quando chiama la funzione FilterRestart di un driver di filtro, NDIS passa un puntatore a una struttura NDIS_RESTART_ATTRIBUTES per filtrare il driver nel membro RestartAttributes della struttura NDIS_FILTER_RESTART_PARAMETERS . I driver di filtro possono modificare gli attributi di riavvio specificati dai driver sottostanti. Per altre informazioni su come modificare gli attributi di riavvio, vedere FilterRestart.
Nota NDIS chiama FilterSetModuleOptions per tutti i moduli di filtro in uno stack prima che NDIS chiami la funzione FilterRestart per qualsiasi modulo di filtro nello stack.
NDIS avvia un modulo di filtro come parte di un'operazione di Plug and Play per riavviare uno stack di driver. Per una panoramica del riavvio dello stack di driver, vedere Riavvio di uno stack di driver.
Per conto di un modulo di filtro che si trova nello stato Riavvio , il driver di filtro:
Completa tutte le operazioni necessarie per riavviare le normali operazioni di invio e ricezione.
Per altre informazioni sulle operazioni di invio e ricezione, vedere Filtrare le operazioni di invio e ricezione del modulo.
Può leggere o scrivere parametri configurabili per il modulo di filtro.
Può ricevere indicazioni per i dati di rete. Il driver può copiare e accodare tali dati e indicare che in un secondo momento i driver sono eccessivamente in grado di ignorare i dati.
Non deve avviare nuove indicazioni di ricezione.
Deve rifiutare immediatamente tutte le nuove richieste di invio effettuate alla funzione FilterSendNetBufferLists chiamando la funzione NdisFSendNetBufferListsComplete . Deve impostare lo stato completo in ogni NET_BUFFER_LIST su NDIS_STATUS_PAUSED.
Può fornire indicazioni sullo stato con la funzione NdisFIndicateStatus .
Per altre informazioni sulle indicazioni sullo stato, vedere Indicazioni sullo stato del modulo di filtro.
Deve gestire le richieste OID nella funzione FilterOidRequest .
Per altre informazioni sulle richieste OID, vedere Filtrare le richieste OID del modulo.
Non deve avviare nuove richieste di invio.
Dovrebbe restituire immediatamente nuove indicazioni di ricezione a NDIS chiamando la funzione NdisFReturnNetBufferLists . Se necessario, il driver può copiare tali indicazioni prima di restituirle.
Può effettuare richieste OID ai driver sottostanti per impostare o eseguire query sulle informazioni di configurazione aggiornate.
Deve gestire le indicazioni di stato nella funzione FilterStatus .
Deve indicare NDIS_STATUS_SUCCESS o uno stato di errore. Se un modulo di filtro non viene riavviato, NDIS lo scollega e, se si tratta di un filtro obbligatorio, NDIS termina l'intero stack di driver.
Dopo il riavvio delle operazioni di invio e ricezione, il driver di filtro deve completare l'operazione di riavvio. Il driver di filtro può completare l'operazione di riavvio in modo sincrono o asincrono restituendo rispettivamente NDIS_STATUS_SUCCESS o NDIS_STATUS_PENDING da FilterRestart.
Se il driver restituisce NDIS_STATUS_PENDING, deve chiamare la funzione NdisFRestartComplete dopo aver completato l'operazione di riavvio. In questo caso, il driver passa lo stato finale dell'operazione di riavvio a NdisFRestartComplete.
Al termine dell'operazione di riavvio, il modulo di filtro si trova nello stato In esecuzione . Il driver riprende l'elaborazione normale di invio e ricezione.
NDIS non avvia altre operazioni di Plug and Play, ad esempio, allegare, scollegare o sospendere le richieste, mentre il driver di filtro si trova nello stato di riavvio. NDIS può avviare richieste di sospensione dopo che un driver di filtro si trova nello stato In esecuzione . Per altre informazioni sulla sospensione di un modulo di filtro, vedere Sospensione di un modulo filtro.