標準驅動程式常式簡介
每個核心模式驅動程式都是以一組系統定義的標準驅動程式常式來建構。 核心模式驅動程式會藉由呼叫系統提供的驅動程式支援常式,在這些標準常式內處理 I/O 要求封包 , (IRP) 。
不論驅動程式鏈結中的驅動程式層級為何,所有驅動程式都必須有一組基本的標準常式,才能處理 IRP。 驅動程式是否必須實作額外的標準常式,取決於驅動程式是否控制實體裝置,還是分層在實體設備磁碟機上,以及基礎實體裝置的本質。 控制實體裝置的最低層級驅動程式具有比較高層級驅動程式更多的必要常式,這通常會將 IRP 傳遞至較低的驅動程式進行處理。
標準驅動程式常式可以分成兩個群組:每個核心模式驅動程式都必須有,以及視 裝置堆疊中的驅動程式類型和位置而定,這些是選擇性的。
下表列出必要的標準常式。
必要的標準驅動程式常式 | 目的 | 描述的位置 |
---|---|---|
DriverEntry | 初始化驅動程式及其驅動程式物件。 | 撰寫 DriverEntry 常式 |
AddDevice | 初始化裝置並建立裝置物件。 | 撰寫 AddDevice 常式 |
分派常式 | 接收和處理 IRP。 | 撰寫分派常式 |
卸載 | 釋放驅動程式取得的系統資源。 | 撰寫卸載常式 |
下表列出數個選擇性常式。
選擇性標準驅動程式常式 | 目的 | 描述的位置 |
---|---|---|
重新初始化 | 如果 DriverEntry 無法完成驅動程式初始化。 | 撰寫重新初始化常式 |
StartIo | 在實體裝置上啟動 I/O 作業。 | 撰寫 StartIo 常式 |
插斷服務常式 | 在中斷時儲存裝置的狀態。 | 撰寫 ISR |
延後程式調用 | 完成 ISR 儲存裝置狀態之後裝置中斷的處理。 | DPC 物件和 DPC |
SynchCritSection | 同步處理驅動程式資料的存取。 | 使用重要區段 |
AdapterControl | 起始 DMA 作業。 | 配接器物件和 DMA |
IoCompletion | 完成 IRP 的驅動程式處理。 | 正在完成 IRP |
取消 | 取消驅動程式的 IRP 處理。 | 取消 IRP |
CustomTimerDpc、 IoTimer | 計時和同步處理事件。 | 同步處理技術 |
目前的 IRP 和目標裝置物件是許多標準常式的輸入參數。 每個驅動程式都會透過其一組標準常式,以階段處理每個 IRP。
依照慣例,系統提供的驅動程式會在 DriverEntry以外的每個標準常式名稱前面加上識別、驅動程式特定或裝置特定前置詞。 例如,本檔使用 「DD」,如 驅動程式物件簡介中的圖例所示。 遵循此慣例可讓您更輕鬆地偵錯和維護驅動程式。
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應