共用方式為


選擇性分派例程

驅動程式可能包含下列分派常式:

  • 調度清理

    IRP_MJ_CLEANUP 表示正在關閉與目標裝置物件相關聯之檔案物件的最後一個控制碼。 檔案物件的未完成 I/O 要求可能仍然存在。 驅動程式可以實作 DispatchCleanup 常式,以執行不特定於任何特定檔案句柄的清除。 驅動程式也可以將其 DispatchClose 常式用於相同的目的。

  • DispatchQueryInformationDispatchSetInformation

    某些最高層級的驅動程式可能必須處理 IRP_MJ_QUERY_INFORMATIONIRP_MJ_SET_INFORMATION IRP。 這類要求表示,使用者模式的應用程式、核心模式元件或驅動程式要求關於檔案物件長度的資訊(該檔案物件代表驅動程式的裝置物件),而此使用者模式的請求者持有控制代碼,或是使用者模式的請求者嘗試在該檔案物件上設置檔案結尾。

    平行類別和序列裝置驅動程式會將 FILE_STANDARD_INFORMATIONFILE_POSITION_INFORMATION 長度或位置設定為零來處理這些要求。 其他最高層級的裝置驅動程式應該支援這些要求,特別是當使用者模式應用程式或核心模式驅動程式可能會呼叫 C 運行時間函式來操作檔案物件時。 檔案系統驅動程式必須比這些最高層級的裝置驅動程式更完整地支援這些要求。

  • DispatchFlush緩衝區

    在裝置中快取資料或在驅動程式配置記憶體中內部緩衝資料的驅動程式可能會收到 IRP_MJ_FLUSH_BUFFERS。 收到此要求表示驅動程式應該寫入其緩衝數據或將快取數據排清至裝置,或應該捨棄從裝置讀取的緩衝或快取數據。

    例如,系統鍵盤和滑鼠類別驅動程式具有來自其裝置輸入數據的內部環形緩衝區,支援排清要求。 大容量儲存裝置的驅動程式及其上方的驅動程式也支援此要求。

  • 調度關機

    在系統關閉之前可能呼叫的任何驅動程式都必須處理 IRP_MJ_SHUTDOWNDispatchShutdown 常式應在電源管理員傳送系統設定電源 IRP 以關閉系統之前,先執行驅動程式決定的任何所需的清理工作。 驅動程式可以呼叫 IoRegisterShutdownNotificationIoRegisterLastChanceShutdownNotification 來註冊關機通知。

大量儲存裝置的驅動程式及覆蓋在其上的中介驅動程式可以依賴最高層級的檔案系統驅動程式,在系統即將關閉時傳送關機請求封包(IRP)。 也就是說,FSD 負責確保任何快取的檔案數據都會寫入周邊裝置、呼叫基礎驅動程式,以從其裝置快取或緩衝區 (如果有的話) 排清數據,等等,在系統關閉之前。

在內部快取數據的大容量儲存裝置驅動程式必須提供 DispatchShutdownDispatchFlushBuffers 常式。 如果大量儲存體驅動程式在記憶體中緩衝資料,但其裝置沒有內部快取,則仍然需要提供 DispatchShutdownDispatchFlushBuffers 常式。

任何分層在驅動程式上方的中繼驅動程式,以處理 IRP_MJ_FLUSH_BUFFERSIRP_MJ_SHUTDOWN 要求也會提供 DispatchShutdownDispatchFlushBuffers 常式。