Windows NT 裝置驅動程式開發基礎(3) (轉)

worldblog發表於2007-12-12
Windows NT 裝置驅動程式開發基礎(3) (轉)[@more@]1.3 實現細節 
 
 1.3.1 核心程式碼執行級別 
 
  NT為它的核心的程式碼分配了不同的級別。在同一個上,級別低的過程 
可以被任何級別更大的過程中斷。級別由低到高排列如下: 
 
 級別名稱 執行於該級別的過程 
 
 PASSIVE_LEVEL Entry, Unload, ShutDown, DispatchXxx。 
 
 APC_LEVEL 在某些特殊情況下,大量裝置的執行於該級別。 
 
 DISPATCH_LEVEL StartIo, AdapterControl, ControllerControl, IoTimer,Dpc。 
 
 DIRQLs 各種中斷處理程式。 
 
 表二 
 1.3.2 幾個 
 
 i) I/O請求包(IRP) 
 
 I/O管理器每收到一個來自的請求就建立一個該結構,並將其作為引數傳給驅 
動程式的DispatchXxx、StartIo過程。該結構中存放有請求的型別,使用者緩衝區的首地 
址,使用者請求資料的長度等資訊。驅動程式處理完這個請求後,也在該結構中添入處理 
結果的有關資訊,IoCompleteRequest將其返回給I/O管理器,使用者程式的請求隨即 
返回。 
 
 ii) DPC 
 
 當驅動程式中要用到Dpc過程時,需要建立該物件。具體作用請見1.3.3。 
 
 iii) 驅動程式物件(Driver) 
 
 該物件在驅動程式被啟動時由I/O管理器建立,儲存有該程式處理各種請求的過程 
入口、該程式所驅動的全部裝置物件的連結串列等。 
 
 iv) 裝置物件(DeviceObject) 
 
 每發現一個可以驅動的裝置,驅動程式呼叫IoCreateDevice建立一個該物件。該 

物件有一個指標DeviceExtension指向一塊由驅動程式定義的結構,其中儲存有關此裝置 
的如埠號,中斷向量等全部資訊。 
 
 v) 中斷物件(Interrupt) 
 
 該物件在驅動程式呼叫IoConnectInterrupt時建立,存有中斷及處理的過程的資訊。 
當一箇中斷髮生時,I/O管理器用它尋找對應的處理過程。 
 
 
 1.3.3 推遲過程呼叫(Deferred Procedure Call) 
 
 由於中斷處理過程執行於較高的DIRQL級,它們能遮蔽許多級別小於或等於它們的過程 
的,如果它們佔用CPU時間過長,很容易使下降。因此中斷處理過程應將一 
些不是很緊急的任務放在被稱為Dpc的過程中,在完成資料傳輸等緊急任務後將一個DPC 
物件放在系統DPC佇列的末尾,然後退出,儘量早地讓出CPU。系統將在完成所有DIRQL級 
的任務後處理DPC佇列,在DISPATCH_LEVEL執行每一個DPC 物件指定的Dpc過程,完成中 
處理斷過程未盡的任務。 
 
-- 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-992237/,如需轉載,請註明出處,否則將追究法律責任。

相關文章