Freigeben über


IRQLs in Netzwerktreibern

Jede von NDIS aufgerufene Treiberfunktion wird bei einem systembestimmten IRQL (einer von PASSIVE_LEVEL < DISPATCH_LEVEL < DIRQL) ausgeführt. Die Initialisierungsfunktion eines Miniporttreibers, die Stoppfunktion, die Zurücksetzungsfunktion und die Herunterfahrenfunktion werden häufig bei PASSIVE_LEVEL ausgeführt, obwohl Zurücksetzungs- und Herunterfahrenfunktionen bei einem höheren IRQL aufgerufen werden können, wenn das System es erfordert. Interruptcode wird bei DIRQL ausgeführt, sodass ein NDIS-Zwischen- oder Protokolltreiber nie bei DIRQL ausgeführt wird. Alle anderen NDIS-Treiberfunktionen werden bei oder unter IRQL = DISPATCH_LEVEL ausgeführt.

Die IRQL, bei der eine Treiberfunktion ausgeführt wird, wirkt sich darauf aus, welche NDIS-Funktionen aufgerufen werden können. Bestimmte Funktionen können nur bei IRQL = PASSIVE_LEVEL aufgerufen werden. Andere können bei DISPATCH_LEVEL oder niedriger aufgerufen werden. Sie sollten jede NDIS-Funktion auf IRQL-Einschränkungen überprüfen.

Jede Treiberfunktion, die Ressourcen mit der Interrupt-Dienstroutine (ISR) des Treibers teilt, muss in der Lage sein, ihren IRQL auf DIRQL zu erhöhen, um Race-Bedingungen zu verhindern. NDIS bietet einen solchen Mechanismus.