Condividi tramite


IRQLs nei driver di rete

Ogni funzione driver chiamata da NDIS viene eseguita in un irQL determinato dal sistema (uno dei PASSIVE_LEVEL DISPATCH_LEVEL << DIRQL). Ad esempio, la funzione di inizializzazione del driver miniport, la funzione di arresto, la funzione di reimpostazione e la funzione di arresto vengono eseguite in genere in PASSIVE_LEVEL, anche se le funzioni di reimpostazione e arresto possono essere richiamate in un irQL superiore se il sistema lo richiede. Il codice di interruzione viene eseguito in DIRQL, quindi un driver intermedio o protocollo NDIS non viene mai eseguito in DIRQL. Tutte le altre funzioni driver NDIS vengono eseguite in corrispondenza o sotto IRQL = DISPATCH_LEVEL.

IrQL in cui viene eseguita una funzione driver influisce sulle funzioni NDIS che può chiamare. Alcune funzioni possono essere chiamate solo in IRQL = PASSIVE_LEVEL. Altri possono essere chiamati in DISPATCH_LEVEL o in basso. È necessario controllare ogni funzione NDIS per le restrizioni IRQL.

Qualsiasi funzione driver che condivide le risorse con la routine del servizio di interruzione del driver (ISR) deve essere in grado di generare il relativo IRQL a DIRQL per impedire le condizioni di gara. NDIS fornisce un meccanismo di questo tipo.