Condividi tramite


Codice di cui è possibile eseguire il paging e l'eliminazione in un driver di protocollo

Gli sviluppatori di driver devono designare il codice come modificabile quando possibile, liberando spazio di sistema per il codice che deve essere residente in memoria. È possibile contrassegnare le funzioni come pageable con la macro NDIS_PAGEABLE_FUNCTION . IrQL, le funzionalità di gestione delle risorse e altre caratteristiche di una funzione potrebbero impedire la paginabilità della funzione.

Ogni funzione ProtocolXxx viene eseguita in un IRQL compreso nell'intervallo compreso tra PASSIVE_LEVEL e DISPATCH_LEVEL. Le funzioni eseguite esclusivamente in IRQL = PASSIVE_LEVEL devono essere contrassegnate come pageable.

Una funzione driver eseguita in IRQL = PASSIVE_LEVEL può essere resa pageable purché non chiami né venga chiamata da alcuna funzione eseguita in IRQL >= DISPATCH_LEVEL, ad esempio una funzione che acquisisce un blocco di rotazione. L'acquisizione di un blocco di selezione fa sì che il runtime di integrazione del thread di acquisizione venga generato DISPATCH_LEVEL. Una funzione driver, ad esempio ProtocolBindAdapterEx, eseguita in IRQL = PASSIVE_LEVEL non deve chiamare alcuna funzione NdisXxx eseguita in IRQL >= DISPATCH_LEVEL se tale funzione driver è contrassegnata come codice di paging. Per altre informazioni su IRQL per ogni funzione NdisXxx , vedere Funzioni della libreria NDIS.

La funzione DriverEntry dei driver di protocollo NDIS, nonché il codice chiamato solo da DriverEntry, deve essere specificato come codice di sola inizializzazione, usando la macro NDIS_INIT_FUNCTION . Si presuppone che il codice identificato con questa macro venga eseguito una sola volta al momento dell'inizializzazione del sistema e, di conseguenza, viene mappato solo durante tale periodo. Dopo che una funzione contrassegnata come inizializzazione viene restituita, viene rimossa.