Filtro delle richieste OID in un driver di filtro NDIS
I driver di filtro possono elaborare le richieste OID che vengono originati da driver overlying. NDIS chiama la funzione FilterOidRequest per elaborare ogni richiesta OID. I driver di filtro possono inoltrare richieste OID ai driver sottostanti chiamando la funzione NdisFOidRequest .
NDIS può chiamare la funzione FilterCancelOidRequest di un driver di filtro per annullare una richiesta OID. Quando NDIS chiama FilterCancelOidRequest, il driver di filtro deve provare a chiamare la funzione NdisFOidRequest il prima possibile.
La figura seguente illustra una richiesta OID filtrata.
Il driver di filtro può completare la richiesta OID in modo sincrono o asincrono restituendo rispettivamente NDIS_STATUS_SUCCESS o NDIS_STATUS_PENDING da FilterOidRequest. FilterOidRequest può anche completare in modo sincrono uno stato di errore.
Un driver di filtro che gestisce correttamente una richiesta di set OID deve impostare il membro SupportedRevision nella struttura NDIS_OID_REQUEST alla restituzione dalla richiesta del set OID. Il membro SupportedRevision notifica all'iniziatore della richiesta OID sulla quale rivedere il driver supportato. Per altre informazioni sulle informazioni sulla versione nelle strutture NDIS, vedere Specifica delle informazioni sulla versione di NDIS.
Se FilterOidRequest restituisce NDIS_STATUS_PENDING, deve chiamare la funzione NdisFOidRequestComplete dopo aver completato la richiesta OID. In questo caso, il driver passa i risultati della richiesta al parametro OidRequest di NdisFOidRequestComplete. Il driver passa lo stato finale della richiesta al parametro Status di NdisFOidRequestComplete.
Se FilterOidRequest restituisce NDIS_STATUS_SUCCESS, restituisce i risultati di una richiesta di query nella struttura NDIS_OID_REQUEST al parametro OidRequest . In questo caso, il driver non chiama la funzione NdisFOidRequestComplete .
Per inoltrare una richiesta OID ai driver sottostanti, un driver di filtro chiama la funzione NdisFOidRequest . Se una richiesta non deve essere inoltrata ai driver sottostanti, un driver di filtro può completare immediatamente la richiesta. Per completare la richiesta senza inoltrare, il driver può restituire NDIS_STATUS_SUCCESS (o uno stato di errore) da FilterOidRequest oppure può chiamare NdisFOidRequestComplete dopo aver restituito NDIS_STATUS_PENDING.
Nota Prima che il driver chiami NdisFOidRequest, il driver deve allocare una struttura NDIS_OID_REQUEST e trasferire le informazioni sulla richiesta alla nuova struttura chiamando NdisAllocateCloneOidRequest.
La richiesta inoltrata procede come una richiesta avviata da un driver di filtro. Per altre informazioni, vedere Generazione di richieste OID da un driver di filtro NDIS.
Dopo aver completato una richiesta inoltrata, il driver di filtro può modificare la risposta, se necessario e passarlo ai driver overlying.
Un driver di filtro può ricevere richieste OID dai driver overlying quando si trova nello stato Riavvia, Esecuzione, sospensione o sospensione .
Nota Come i driver miniport, i driver di filtro possono ricevere una sola richiesta OID alla volta. Poiché NDIS serializza le richieste inviate a un modulo di filtro, un driver di filtro non può essere chiamato in FilterOidRequest prima di completare la richiesta precedente.
Di seguito è riportato un esempio di driver di filtro che modifica una richiesta OID:
- Un driver di filtro aggiunge un'intestazione. In questo caso, dopo che il driver riceve una risposta a una query per OID_GEN_MAXIMUM_FRAME_SIZE dai driver sottostanti, il filtro sottrae le dimensioni dell'intestazione dalla risposta. Il driver sottrae le dimensioni dell'intestazione perché il driver inserisce un'intestazione davanti a ogni pacchetto inviato e rimuove l'intestazione in ogni pacchetto ricevuto.