撰寫 AddDevice 常式的指導方針
撰寫 AddDevice 常式時,請考慮下列設計指導方針:
如果篩選驅動程式判斷其 AddDevice 常式是針對不需要服務的裝置呼叫,篩選驅動程式必須傳回STATUS_SUCCESS,以允許裝置載入其餘的裝置堆疊。 篩選驅動程式不會建立裝置物件,也不會將它附加至裝置堆疊;篩選驅動程式只會傳回成功,並允許將其餘的驅動程式新增至堆疊。
驅動程式必須針對任何核心定義的物件,以及它所使用的執行微調鎖定,提供裝置物件的裝置擴充功能。 驅動程式也必須為從 I/O 管理員或其他系統元件取得之特定物件的指標提供儲存體。
您可能會決定為驅動程式的需求配置額外的系統空間記憶體,例如長期 I/O 緩衝區或外觀清單。 如果是, AddDevice 常式可以呼叫下列常式:
適用于分頁或非分頁系統空間記憶體的 ExAllocatePoolWithTag
ExInitializePagedLookasideList 或 ExInitializeNPagedLookasideList ,以初始化分頁或非分頁的 lookaside 清單
如果驅動程式具有裝置專用線程,或等候任何核心定義的發送器物件, AddDevice 常式可能會初始化 核心發送器物件。
如果驅動程式使用任何執行微調鎖定,或提供中斷微調鎖定的儲存體, AddDevice 常式可能會初始化這些微調鎖定。 如需詳細資訊 ,請參閱微調鎖定 。
在呼叫 IoCreateDevice時,強化檔案開啟安全性。
在呼叫 IoCreateDevice時指定FILE_DEVICE_SECURE_OPEN特性。 Windows NT 4.0 SP5 和更新版本支援這項特性。 它會指示 I/O 管理員針對所有開啟的要求對裝置物件執行安全性檢查。 如果裝置的類別安裝程式 INF 或裝置的 INF 中未設定FILE_DEVICE_SECURE_OPEN特性,且驅動程式不會在開啟時執行自己的安全性檢查,廠商應該在呼叫 IoCreateDevice 時指定此特性。 (如需詳細資訊,請參閱 控制裝置命名空間 Access.)
如果驅動程式在呼叫 IoCreateDevice時設定FILE_DEVICE_SECURE_OPEN特性,則 I/O 管理員會將裝置物件的安全性描述元套用至任何相對的開啟或尾端檔案名開啟。 例如,如果已針對 \Device\foo 設定FILE_DEVICE_SECURE_OPEN,而且如果 \Device\foo 只能由系統管理員開啟,則系統管理員也可以開啟 \Device\foo\abc。 不過,I/O 管理員可防止一般使用者開啟 \Device\foo 和 \Device\foo\abc。
如果裝置的一個驅動程式設定這個特性,PnP 管理員會將它傳播到裝置的所有裝置物件。
重要
本主題中所討論的 ExAllocatePool DIS 已在 Windows 10 2004 版中淘汰,且已由ExAllocatePool2和ExAllocatePool3取代。 如需詳細資訊,請參閱 更新對 ExAllocatePool2 和 ExAllocatePool3 的已淘汰 ExAllocatePool 呼叫。