Freigeben über


IRQLs in Netzwerktreibern

Jede von NDIS aufgerufene Treiberfunktion wird mit einem systembestimmten IRQL ausgeführt (einer der PASSIVE_LEVEL < DISPATCH_LEVEL < DIRQL). Beispielsweise werden die Initialisierungsfunktion eines Miniporttreibers, die Stoppfunktion , die Zurücksetzungsfunktion und die Herunterfahren-Funktion häufig bei PASSIVE_LEVEL ausgeführt, obwohl die Funktionen zum Zurücksetzen und Herunterfahren bei einem höheren IRQL aufgerufen werden können, wenn das System dies erfordert. Interruptcode wird bei DIRQL ausgeführt, sodass ein NDIS-Zwischen- oder Protokolltreiber nie bei DIRQL ausgeführt wird. Alle anderen NDIS-Treiberfunktionen werden mit 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 unter IRQL = PASSIVE_LEVEL aufgerufen werden. Andere können mit 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 Fahrers teilt, muss in der Lage sein, ihre IRQL auf DIRQL zu erhöhen, um Rennbedingungen zu verhindern. NDIS bietet einen solchen Mechanismus.