標準驅動程式例程簡介
每個內核模式驅動程式都是以一組系統定義的標準驅動程式例程來建構。 核心模式驅動程式會呼叫系統提供的驅動程序支援例程,來處理這些標準例程內的 I/O要求封包 (IRP)。
不論所有驅動程式在連結驅動程序鏈中的層級為何,所有驅動程式都必須有一組基本的標準例程,才能處理 IRP。 驅動程式是否必須實作額外的標準例程,取決於驅動程式是否控制實體裝置,還是分層在實體設備驅動器上,以及基礎實體裝置的性質。 控制實體裝置的最低層級驅動程序比較高層級驅動程式更需要例程,這通常會將 IRP 傳遞至較低的驅動程式進行處理。
標準驅動程式例行程序可以分成兩個群組:一是每個內核模式驅動程式必須具備的例行程序,二是根據驅動程式類型和在裝置堆疊中的位置而定的選擇性例行程序。
下表列出必要的標準例程。
必要的標準驅動程式例程 | 目標 | 記述地點 |
---|---|---|
DriverEntry | 初始化驅動程式及其驅動程序物件。 | 撰寫 DriverEntry 例程 |
#B0 #A1 新增裝置 #A2 #C3 | 初始化裝置並建立裝置物件。 | 撰寫 AddDevice 例程 |
分派例程 | 接收和處理 IRP。 | 撰寫分派例程 |
卸除 | 釋放驅動程式取得的系統資源。 | 撰寫卸除例程 |
下表列出數個選擇性例程。
選擇性標準驅動程式例程 | 目標 | 記述的地方 |
---|---|---|
重新初始化 | 如果 DriverEntry 無法完成驅動程式初始化。 | 撰寫重新初始化例程 |
StartIo | 在實體裝置上啟動 I/O 作業。 | 撰寫 StartIo 例程 |
中斷服務例程 | 當終端裝置中斷時,儲存其狀態。 | 撰寫ISR |
延遲程序呼叫 | 完成在 ISR 儲存裝置狀態後處理裝置中斷的工作。 | DPC 物件和 DPCs |
SynchCritSection | 同步管理對驅動程式資料的存取。 | 使用重要區段 |
AdapterControl | 起始 DMA 作業。 | 配接器物件和 DMA |
IoCompletion | 完成驅動程式對 IRP 的處理。 | 完成 IRP |
取消 | 取消驅動程式對 IRP 的處理。 | 取消 IRPs |
CustomTimerDpc、 IoTimer | 計時和同步處理事件。 | 同步處理技術 |
當前的 IRP 和目標裝置物件是許多標準程序的輸入參數。 每個驅動程式都會透過其一組標準例程,分階段處理每個 IRP。
根據慣例,系統提供的驅動程式會在每個標準例程的名稱前加上識別用、驅動程式特定或裝置特定的前綴字,唯DriverEntry除外。 例如,本檔使用 「DD」,如 驅動程式對象簡介中的圖例所示。 遵循此慣例可讓您更輕鬆地偵錯和維護驅動程式。