選擇性分派常式
驅動程式可能包含下列分派常式:
-
IRP_MJ_CLEANUP 表示與目標裝置物件相關聯的檔案物件最後一個控制碼正在關閉。 檔案物件的未處理 I/O 要求可能仍然存在。 驅動程式可以實作 DispatchCleanup 常式,以執行不是任何特定檔案控制碼特有的清除。 驅動程式也可以將其 DispatchClose 常式用於相同的用途。
DispatchQueryInformation、 DispatchSetInformation
某些最高層級驅動程式可能需要處理 IRP_MJ_QUERY_INFORMATION 和 IRP_MJ_SET_INFORMATION IRP。 這類要求表示使用者模式應用程式、核心模式元件或驅動程式已要求檔案物件長度的相關資訊, (代表使用者模式要求者具有控制碼的驅動程式裝置物件) ,或是使用者模式要求者嘗試在該檔案物件上設定檔案結尾。
平行類別和序列設備磁碟機會藉由將 FILE_STANDARD_INFORMATION 或 FILE_POSITION_INFORMATION 長度或位置設定為零來處理這些要求。 其他最高層級的設備磁碟機應該支援這些要求,特別是當使用者模式應用程式或核心模式驅動程式可能會呼叫 C 執行時間函式來操作檔案物件時。 檔案系統驅動程式必須比這些最高層級設備磁碟機更完全支援這些要求。
-
在驅動程式配置的記憶體內部快取資料或緩衝區資料的驅動程式可能會收到 IRP_MJ_FLUSH_BUFFERS。 收到此要求表示驅動程式應該寫入其緩衝資料,或將快取的資料排清到裝置,或應捨棄從裝置讀取的緩衝或快取資料。
例如,系統鍵盤和滑鼠類別驅動程式,其具有來自其裝置之輸入資料的內部環形緩衝區,支援排清要求。 大量儲存裝置的驅動程式和分層在上方的驅動程式也支援此要求。
-
在系統關閉之前,可能呼叫的任何驅動程式都必須處理 IRP_MJ_SHUTDOWN。 DispatchShutdown常式應該在電源管理員傳送系統 set-power IRP 來關閉系統之前,執行任何驅動程式決定清除的必要動作。 驅動程式可以呼叫 IoRegisterShutdownNotification 或 IoRegisterLastChanceShutdownNotification 來註冊關機通知。
多層式大量儲存裝置和中繼驅動程式的驅動程式可以依賴最高層級檔案系統驅動程式,在系統即將關閉時傳送關機 IRP。 也就是說,FSD 負責確定任何快取的檔案資料都會寫出到周邊裝置、呼叫基礎驅動程式來排清其裝置快取或緩衝區中的資料,如果有任何) ,則為 (,依此類推,再關閉系統。
大量儲存裝置的驅動程式必須在內部快取資料,才能提供 DispatchShutdown 和 DispatchFlushBuffers 常式。 如果大量儲存體驅動程式會緩衝記憶體中的資料,但其裝置沒有內部快取,它也必須提供 DispatchShutdown 和 DispatchFlushBuffers 常式。
處理 IRP_MJ_FLUSH_BUFFERS 和 IRP_MJ_SHUTDOWN 要求的任何中繼驅動程式,也會提供 DispatchShutdown 和 DispatchFlushBuffers 常式。