Windows驅動程序運行上下文簡要分析<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
Windows驅動程序在內核態執行,作爲驅動開發人員,我們有必要對驅動程序的執行環境有所瞭解,這將有助於我們正確合理地使用系統資源,從而避免產生一些難以檢測的bug。
總體來說,windows驅動程序運行的上下文環境有如下四類:
1、 請求系統服務線程的上下文
在這種情況下,驅動程序直接在請求系統服務的那個線程上下文執行。由於用戶可能請求異步執行,通常只有文件系統驅動程序或者處於文件系統以上的過濾驅動程序纔會運行在這個上下文中。在這個上下文中,驅動程序可以訪問該用戶線程的虛擬地址空間。
2、 驅動程序或一些內核組件創建的專用工作線程(worker thread)的上下文
有些情況下驅動程序不能在請求系統服務那個線程的上下文中執行一些操作,因此驅動程序可以創建一個專用的工作線程(通過PsCreateSystemThread()函數),然後驅動程序就運行在這個工作線程上下文來完成這些工作,該專用工作線程是屬於一個特殊的系統進程的。
3、 I/O管理器創建的工作線程(worker thread)的上下文
在需要確定的線程上下文環境時,我們也可以利用I/O管理器創建的工作線程(也叫系統工作線程)上下文來完成一些I/O操作。要注意的是,一旦我們把I/O請求交給系統工作線程,我們的線程上下文就發生了改變,我們能訪問的虛擬地址空間將不同於先前請求I/O那個線程的虛擬地址空間,同時,很多在以前上下文中的有效的資源將不在有效。
4、 任意隨機線程的上下文
這個上下文最典型的例子就是:當一個硬件中斷產生時,如果允許的話,當前處理器執行的線程將被打斷執行,而與該中斷相聯繫的ISR將被執行,此時ISR運行的上下文將是不確定的,這就是所謂的任意線程上下文。
任意線程上下文中的很多資源對驅動程序來說都是不可訪問的。