Windows NT 裝置驅動程式開發基礎(3) (轉)
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過程,完成中
處理斷過程未盡的任務。
--
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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Windows NT 裝置驅動程式開發基礎(1) (轉)Windows
- Windows NT 裝置驅動程式開發基礎(2) (轉)Windows
- Windows NT 裝置驅動程式開發基礎(4) (轉)Windows
- Windows NT 裝置驅動程式開發基礎(5) (轉)Windows
- Windows NT 裝置驅動程式開發基礎(7) (轉)Windows
- Windows NT 裝置驅動程式開發基礎(6) (轉)Windows
- Windows NT 裝置驅動程式開發基礎(8) (轉)Windows
- DeviceDriver Windows NT 驅動程式型別 (轉載) (轉)devWindows型別
- SCO UNIX 下裝置驅動程式開發 (轉)
- SCO UNIX 下裝置驅動程式開發(轉)
- 使用Windows 95虛擬裝置驅動程式(VxD) (轉)Windows
- Windows95的裝置驅動程式的編寫 (轉)Windows
- Linux裝置驅動程式 (轉)Linux
- linux裝置驅動編寫基礎Linux
- 開發Linux系統裝置驅動程式並不難(轉)Linux
- Linux驅動開發筆記(四):裝置驅動介紹、熟悉雜項裝置驅動和ubuntu開發雜項裝置DemoLinux筆記Ubuntu
- Windows裝置和驅動的安裝Windows
- Linux下的硬體驅動——USB裝置(下)(驅動開發部分)(轉)Linux
- LINUX下的裝置驅動程式 (轉)Linux
- 用 Delphi 編寫 VxD 裝置驅動程式(轉) (轉)
- Linux裝置驅動程式學習----1.裝置驅動程式簡介Linux
- Linux驅動之裝置樹的基礎知識Linux
- 字元裝置驅動 —— 字元裝置驅動框架字元框架
- iOS 裝置驅動 for windows 32&64iOSWindows
- 《Linux裝置驅動開發詳解(第2版)》——第1章Linux裝置驅動概述及開發環境構建1.1裝置驅動的作用Linux開發環境
- Linux裝置驅動之字元裝置驅動Linux字元
- UNIX下裝置驅動程式的基本結構(轉)
- 基於匯流排裝置驅動模型的按鍵讀取驅動程式模型
- 在Linux中,什麼是裝置驅動程式?如何安裝和解除安裝裝置驅動程式?Linux
- 裝置驅動程式包可以刪除嗎 win10裝置驅動程式包能刪嗎Win10
- 裸裝置基礎知識(轉)
- 深入淺出:Linux裝置驅動之字元裝置驅動Linux字元
- 乾坤合一:Linux裝置驅動之塊裝置驅動Linux
- Windows的驅動開發模型Windows模型
- Windows驅動開發入門Windows
- 虛擬裝置驅動程式的設計與實現 (轉)
- 深入淺出分析Linux裝置驅動程式中斷(轉)Linux
- IOS 特定於裝置的開發:Core Motion基礎iOS