Udostępnij za pośrednictwem


IRQLs w sterownikach sieciowych

Każda funkcja sterownika wywoływana przez NDIS działa na poziomie IRQL określonym przez system (jednym z PASSIVE_LEVEL <, DISPATCH_LEVEL <, DIRQL). Na przykład funkcja inicjowania sterownika miniportu, funkcja zatrzymania , funkcja resetowania oraz funkcja zamknięcia są często uruchamiane na poziomie PASSIVE_LEVEL, chociaż funkcje resetowania i zamknięcia mogą być wywoływane na wyższym poziomie IRQL, jeśli system tego wymaga. Kod przerwania działa w DIRQL, więc sterownik pośredni lub sterownik protokołu NDIS nigdy nie działa w DIRQL. Wszystkie inne funkcje sterowników NDIS działają na poziomie IRQL równym DISPATCH_LEVEL lub poniżej.

Środowisko IRQL, w którym działa funkcja sterownika, ma wpływ na funkcje NDIS, które może wywołać. Niektóre funkcje mogą być wywoływane tylko przy IRQL równym PASSIVE_LEVEL. Inne mogą być wywoływane na poziomie DISPATCH_LEVEL lub niższym. Należy sprawdzić każdą funkcję NDIS pod kątem ograniczeń IRQL.

Każda funkcja sterownika, która współdzieli zasoby z jego procedurą obsługi przerwań (ISR), musi być w stanie podnieść swojego IRQL do DIRQL, aby zapobiec warunkom wyścigu. Usługa NDIS zapewnia taki mechanizm.