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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Linux驅動開發筆記(四):裝置驅動介紹、熟悉雜項裝置驅動和ubuntu開發雜項裝置DemoLinux筆記Ubuntu
- Linux裝置驅動程式學習----1.裝置驅動程式簡介Linux
- Linux驅動之裝置樹的基礎知識Linux
- iOS 裝置驅動 for windows 32&64iOSWindows
- 字元裝置驅動 —— 字元裝置驅動框架字元框架
- Linux裝置驅動開發詳解:基於Linux4.0核心Linux
- 在Linux中,什麼是裝置驅動程式?如何安裝和解除安裝裝置驅動程式?Linux
- 基於匯流排裝置驅動模型的按鍵讀取驅動程式模型
- 裝置驅動程式包可以刪除嗎 win10裝置驅動程式包能刪嗎Win10
- 研究發現超過 40 個 Windows 裝置驅動程式包含提升許可權的漏洞Windows
- 【系統安全003】NT驅動框架框架
- Linux驅動實踐:如何編寫【 GPIO 】裝置的驅動程式?Linux
- 超過40個Windows裝置驅動程式包含提升許可權的漏洞Windows
- LED字元裝置驅動字元
- ArmSoM系列板卡 嵌入式Linux驅動開發實戰指南 之 字元裝置驅動Linux字元
- 載入NT驅動的類 C++C++
- 驅動Driver-MISC雜項驅動裝置
- 【linux】驅動-7-平臺裝置驅動Linux
- 驅動篇——核心程式設計基礎程式設計
- platform 裝置驅動實驗Platform
- 字元驅動裝置踩坑字元
- 【linux】驅動-6-匯流排-裝置-驅動Linux
- 關於召回《Linux裝置驅動開發詳解-基於最新的Linux 4.0核心》的通知Linux
- Huawei裝置基礎配置
- Linux磁碟裝置基礎Linux
- 驅動程式開發步驟
- 05_雜項裝置驅動
- mtd裝置驅動(待學習)
- linux 裝置驅動基本概念Linux
- Linux驅動實踐:你知道【字元裝置驅動程式】的兩種寫法嗎?Linux字元
- win10驅動未知裝置怎麼辦_win10裝置管理器驅動未知裝置處理方法Win10
- 基於WDF的驅動開發
- pci匯流排驅動及pci裝置驅動註冊
- 零程式碼零硬體玩轉華為雲IoT,基於裝置聯動實時監控裝置
- 非同步通知和MISC裝置驅動非同步
- linux裝置驅動編寫入門Linux
- Windows 11重新安裝音訊驅動程式的教程Windows音訊
- 無作業系統時的裝置驅動和有作業系統時的裝置驅動作業系統
- Windows驅動開發入門 -- 理清基本概念Windows