Condividi tramite


Inizializzazione di un driver di protocollo

Il sistema chiama una routine DriverEntry del protocollo dopo il caricamento del driver. I driver di protocollo caricano come servizi di sistema. Possono caricare in qualsiasi momento prima, durante o dopo il caricamento dei driver miniport.

I driver di protocollo allocano le risorse del driver e registrano funzioni ProtocolXxx in DriverEntry. Ciò include i client CoNDIS e i responsabili delle chiamate autonomi. Per registrare le funzioni ProtocolXxx con NDIS, un driver del protocollo chiama la funzione NdisRegisterProtocolDriver .

DriverEntry restituisce STATUS_SUCCESS o il relativo NDIS_STATUS_SUCCESS equivalente, se il driver registrato come driver di protocollo NDIS ha esito positivo. 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.

La funzione DriverEntry di un driver del protocollo NDIS deve chiamare la funzione NdisRegisterProtocolDriver . Per registrare i punti di ingresso ProtocolXxx del driver con la libreria NDIS, un driver di protocollo inizializza una struttura NDIS_PROTOCOL_DRIVER_CHARACTERISTICS e lo passa a NdisRegisterProtocolDriver.

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

I driver di protocollo NDIS forniscono le funzioni ProtocolXxx seguenti, che sono versioni aggiornate delle funzioni fornite dai driver legacy:

ProtocolSetOptions

ProtocolBindAdapterEx

ProtocolUnbindAdapterEx

ProtocolOpenAdapterCompleteEx

ProtocolCloseAdapterCompleteEx

ProtocolNetPnPEvent

ProtocolUninstall

I driver di protocollo NDIS forniscono le funzioni ProtocolXxx seguenti per le operazioni di invio e ricezione:

ProtocolReceiveNetBufferLists

ProtocolSendNetBufferListsComplete

Tutti i tipi di driver di protocollo NDIS devono registrare funzioni ProtocolBindAdapterEx e ProtocolUnbindAdapterEx per supportare Plug and Play (PnP). In generale, una funzione DriverEntry deve chiamare NdisRegisterProtocolDriver immediatamente prima di restituire il controllo con un valore di stato di STATUS_SUCCESS o NDIS_STATUS_SUCCESS.

Qualsiasi driver di protocollo che esporta un set di routine driver in modalità kernel standard oltre alle funzioni ProtocolXxx definite da NDIS deve impostare i punti di ingresso per tali routine driver nell'oggetto driver specificato passato alla funzione DriverEntry . Per altre informazioni sulla funzionalità di tale funzione DriverEntry del driver del protocollo, vedere Scrittura di una routine DriverEntry.

Se un tentativo di allocare risorse che il driver deve eseguire operazioni di I/O di rete ha esito negativo, DriverEntry deve rilasciare tutte le risorse già allocate prima di restituire il controllo con uno stato diverso da STATUS_SUCCESS o NDIS_STATUS_SUCCESS.

Se si verifica un errore dopo una chiamata riuscita a NdisRegisterProtocolDriver, il driver deve chiamare la funzione NdisDeregisterProtocolDriver prima che DriverEntry restituisca.

Per consentire a un driver di protocollo di configurare i servizi facoltativi, NDIS chiama la funzione ProtocolSetOptions nel contesto della chiamata del driver del protocollo a NdisRegisterProtocolDriver. Per altre informazioni sui servizi facoltativi, vedere Configurazione di Servizi driver di protocollo facoltativi.

I driver client CoNDIS devono chiamare la funzione NdisSetOptionalHandlers dalla funzione ProtocolSetOptions . Il driver inizializza una struttura NDIS_CO_CLIENT_OPTIONAL_HANDLERS e la passa al parametro OptionalHandlers di NdisSetOptionalHandlers.

I responsabili chiamate autonomi coNDIS devono anche chiamare la funzione NdisSetOptionalHandlers dalla funzione ProtocolSetOptions . Il driver inizializza una struttura NDIS_CO_CALL_MANAGER_OPTIONAL_HANDLERS e la passa al parametro OptionalHandlers di NdisSetOptionalHandlers.

Le macchine virtuali non sono driver di protocollo. Pertanto, devono chiamare la funzione NdisSetOptionalHandlers dalla funzione MiniportSetOptions . McM inizializza una struttura NDIS_CO_CALL_MANAGER_OPTIONAL_HANDLERS e la passa al parametro OptionalHandlers di NdisSetOptionalHandlers.

Per annullare la registrazione con NDIS, un driver del protocollo chiama NdisDeregisterProtocolDriver dalla routine Di caricamento .

Per eseguire operazioni di pulizia prima della disinstallazione di un driver di protocollo, un driver di protocollo può registrare una funzione ProtocolUninstall . La funzione ProtocolUninstall è facoltativa. Ad esempio, il bordo inferiore del protocollo di un driver intermedio potrebbe richiedere una funzione ProtocolUninstall . Il driver intermedio può rilasciare le risorse perimetrali del protocollo in ProtocolUninstall prima che NDIS chiami la funzione MiniportDriverUnload .