Condividi tramite


Inizializzazione di un driver di protocollo

Il sistema chiama la routine DriverEntry del driver di protocollo dopo aver caricato il driver. I driver del protocollo vengono caricati come servizi di sistema. Possono essere caricati in qualsiasi momento prima, durante o dopo il caricamento dei driver miniport.

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

DriverEntry restituisce STATUS_SUCCESS o il relativo NDIS_STATUS_SUCCESS equivalente, se il driver si è registrato con successo come driver di protocollo NDIS. Se DriverEntry non riesce nell'inizializzazione propagando uno stato di errore che è stato restituito da una funzione NdisXxx o da una routine di supporto in modalità kernel, il driver non verrà mantenuto caricato. DriverEntry deve essere eseguito in modo sincrono; ovvero non può restituire STATUS_PENDING o il relativo NDIS_STATUS_PENDING equivalente.

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

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

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

OpzioniDiImpostazioneDelProtocollo

ProtocolBindAdapterEx

ProtocolUnbindAdapterEx

ProtocolOpenAdapterCompleteEx

ProtocolCloseAdapterCompleteEx

ProtocolNetPnPEvent

DisinstallaProtocollo

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

ProtocolReceiveNetBufferLists

ProtocolSendNetBufferListsComplete

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

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

In caso di tentativo fallito di allocare le risorse necessarie al driver per eseguire le operazioni di I/O di rete, 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 ulteriori informazioni sui servizi facoltativi, vedere Configurazione dei Servizi Driver di Protocollo Facoltativi.

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

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

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

Per annullare la registrazione con NDIS, un driver di protocollo chiama NdisDeregisterProtocolDriver dalla sua routine di scaricamento .

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 livello 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 relativa funzione MiniportDriverUnload.