IRQL
專業術語
IRQL是Interrupt ReQuest Level,中斷請求級別。一個由windows虛擬出來的概念,劃分在windows下中斷的優先順序,這裡中斷包括了硬中斷和軟中斷,硬中斷是由硬體產生,而軟中斷則是完全虛擬出來的。Windows NT下用戶模式的進程的中斷請求級(IRQL)是最低的,很可能被內核代碼打斷,因而測得的結果存在很大的不確定性。
目錄
處理器在一個IRQL上執行線程代碼。IRQL是幫助決定線程如何被中斷的。在同一處理器上,線程只能被更高級別IRQL的線程能中斷。每個處理器都有自己的中斷IRQL。
我們在調用NDIS API時,在DDK幫助文檔中都有該API函數的所在級別。
PASSIVE_LEVEL
IRQL最低級別,沒有被屏蔽的中斷,在這個級別上,線程執行用戶模式,可以訪問分頁內存。
APC_LEVEL
在這個級別上,只有APC級別的中斷被屏蔽,可以訪問分頁內存。當有APC發生時,處理器提升到APC級別,這樣,就屏蔽掉其它APC,為了和APC執行一些同步,驅動程序可以手動提升到這個級別。比如,如果提升到這個級別,APC就不能調用。在這個級別,APC被禁止了,導致禁止一些I/O完成APC,所以有一些API不能調用。
DISPATCH_LEVEL
這個級別,DPC和更低的中斷被屏蔽,不能訪問分頁內存,所有的被訪問的內存不能分頁。因為只能處理非分頁內存,所以在這個級別,能夠訪問的Api大大減少。
DIRQL(Device IRQL)
一般的,更高級的驅動在這個級別上不處理IRQL,但是幾乎所有的中斷被屏蔽,這實際上是IRQL的一個範圍,這是一個決定某個驅動有更高的優先順序的方法。