PROTOCOL_CO_OID_REQUEST funzione di callback (ndis.h)
La funzione ProtocolCoOidRequest gestisce le richieste OID avviate dai client CoNDIS o dalle chiamate autonome avviate dalle chiamate alla funzione NdisCoOidRequest o che un driver MCM (Miniport Call Manager) viene avviato dalle chiamate alla funzione NdisMCmOidRequest .
Sintassi
PROTOCOL_CO_OID_REQUEST ProtocolCoOidRequest;
NDIS_STATUS ProtocolCoOidRequest(
[in] NDIS_HANDLE ProtocolAfContext,
[in] NDIS_HANDLE ProtocolVcContext,
[in] NDIS_HANDLE ProtocolPartyContext,
[in, out] PNDIS_OID_REQUEST OidRequest
)
{...}
Parametri
[in] ProtocolAfContext
Handle che identifica un'area di contesto della famiglia di indirizzi (AF). Se il driver è un client, viene fornito questo handle quando viene chiamato Funzione NdisClOpenAddressFamilyEx per connettersi al gestore chiamate. Se il driver è un gestore chiamate, questo handle è stato fornito dalla funzione ProtocolCmOpenAf .
[in] ProtocolVcContext
Handle che identifica la connessione virtuale (VC) per eseguire query o impostare informazioni su, se la richiesta è specifica del VC. In caso contrario, questo parametro è NULL.
[in] ProtocolPartyContext
Handle che identifica la parte in un vc a più punti per eseguire query o impostare informazioni su, se la richiesta è specifica delle parti. In caso contrario, questo parametro è NULL.
[in, out] OidRequest
Puntatore a una struttura NDIS_OID_REQUEST che contiene sia il buffer che il pacchetto di richiesta per il driver di destinazione da gestire. A seconda della richiesta, il driver restituisce informazioni richieste nella struttura a cui punta OidRequest .
Valore restituito
ProtocolCoOidRequest può restituire uno dei seguenti elementi:
Codice restituito | Descrizione |
---|---|
|
Il client o il gestore chiamate hanno eseguito l'operazione richiesta. |
|
Il client o il gestore chiamate gestisce questa richiesta in modo asincrono e chiamerà il Funzione NdisCoOidRequestComplete o Funzione NdisMCmOidRequestComplete al termine dell'operazione richiesta. |
|
Il driver ha esito negativo sulla richiesta perché il chiamante della funzione NdisCoOidRequest o NdisMCmOidRequest non ha fornito un valore adeguato per il membro InformationBufferdella struttura NDIS_OID_REQUEST per la richiesta specificata. Il driver imposta il membro BytesNeeded di NDIS_OID_REQUEST nel buffer nel parametro OidRequest sul valore specifico dell'OID del membro InformationBufferLength necessario per eseguire l'operazione richiesta. |
|
Il client o il gestore chiamate non è riuscito a richiedere un motivo determinato dal driver, ad esempio i dati di input non validi specificati per un set. |
|
Il client o il gestore chiamate non è riuscito a questa richiesta perché non riconosce il codice OID_GEN_CO_ XXX nel membro Oid nel buffer in NdisRequest. |
Commenti
La funzione ProtocolCoOidRequest è necessaria per i client CoNDIS, i responsabili delle chiamate e le macchine virtuali. ProtocolCoOidRequest è simile alla funzione MiniportCoOidRequest del driver miniport .
I client coNDIS e i responsabili delle chiamate inviano informazioni tra loro specificando un valore non NULL nel parametro NdisAfHandle quando chiamano la funzione NdisCoOidRequest . Analogamente, le macchine virtuali chiamano NdisMCmOidRequest con valori espliciti per NdisAfHandle per comunicare informazioni ai client. Tali chiamate a NdisCoOidRequest o NdisMCmOidRequest causano NDIS di chiamare la funzione ProtocolCoOidRequest del client, del gestore chiamate o di MCM associati all'handle AF specificato.
Per registrare ProtocolCoOidRequest come client, un driver inizializza un NDIS_CO_CLIENT_OPTIONAL_HANDLERS struttura e lo passa al parametro OptionalHandlers della funzione NdisSetOptionalHandlers . Per registrare ProtocolCoOidRequest come gestore chiamate, un driver inizializza un NDIS_CO_CALL_MANAGER_OPTIONAL_HANDLERS struttura e lo passa al parametro OptionalHandlers .
Se i parametri NdisVcHandle e NdisPartyHandle di NdisCoOidRequest o NdisMCmOidRequest sono NULL, la richiesta è globale. Vale a dire, un valore esplicito per NdisVcHandle o NdisPartyHandle indica che ProtocolCoOidRequest deve soddisfare rispettivamente la richiesta specificata per OGNI VC o per ogni parte.
Il buffer nel parametro OidRequest è stato allocato dal pool non di pagina ed è quindi accessibile a IRQL generato. Il chiamante NdisCoOidRequest(o NdisMCmOidRequest) deve rilasciare questo buffer e il buffer interno nel membro InformationBuffer della struttura NDIS_OID_REQUEST a cui punta OidRequest .
Se ProtocolCoOidRequest restituisce NDIS_STATUS_PENDING, il driver deve successivamente chiamare il Funzione NdisCoOidRequestComplete o Funzione NdisMCmOidRequestComplete per un driver MCM, quando il driver completa la richiesta.
Esempi
Per definire una funzione ProtocolCoOidRequest , è prima necessario specificare una dichiarazione di funzione che identifica il tipo di funzione che si sta definendo. Windows fornisce un set di tipi di funzione per i driver. La dichiarazione di una funzione usando i tipi di funzione consente l'analisi del codice per i driver, il verifica driver statico (SDV) e altri strumenti di verifica trovano errori ed è un requisito per la scrittura di driver per il sistema operativo Windows.Ad esempio, per definire una funzione ProtocolCoOidRequest denominata "MyCoOidRequest ", usare il tipo di PROTOCOL_CO_OID_REQUEST come illustrato in questo esempio di codice:
PROTOCOL_CO_OID_REQUEST MyCoOidRequest;
Implementare quindi la funzione come indicato di seguito:
_Use_decl_annotations_
NDIS_STATUS
MyCoOidRequest(
NDIS_HANDLE ProtocolAfContext,
NDIS_HANDLE ProtocolVcContext,
NDIS_HANDLE ProtocolPartyContext,
PNDIS_OID_REQUEST OidRequest
)
{...}
Il tipo di funzione PROTOCOL_CO_OID_REQUEST è definito nel file di intestazione Ndis.h. Per identificare in modo più accurato gli errori durante l'esecuzione degli strumenti di analisi del codice, assicurarsi di aggiungere l'annotazione Use_decl_annotations alla definizione della funzione. L'annotazione Use_decl_annotations garantisce che vengano usate le annotazioni applicate al tipo di funzione PROTOCOL_CO_OID_REQUEST nel file di intestazione. Per altre informazioni sui requisiti per le dichiarazioni di funzione, vedere Dichiarazione di funzioni tramite tipi di ruolo per i driver NDIS.
Per informazioni su Use_decl_annotations, vedere Annotazione del comportamento della funzione.
Requisiti
Requisito | Valore |
---|---|
Client minimo supportato | Supportato in NDIS 6.0 e versioni successive. |
Piattaforma di destinazione | Windows |
Intestazione | ndis.h (includere Ndis.h) |
IRQL | <= DISPATCH_LEVEL |