共用方式為


個別 DispatchCreate 和 DispatchClose 常式

驅動程式的 分派 常式適用于 IRP_MJ_CREATEIRP_MJ_CLOSE 要求,可能不只完成輸入 IRP 與 STATUS_SUCCESS。 如需詳細資訊,請參閱 完成 IRP

另一個驅動程式的 分派 常式適用于 IRP_MJ_CREATEIRP_MJ_CLOSE 要求可能會執行更多工作,視基礎裝置驅動程式或基礎裝置而定。 請考慮下列案例:

  • 在收到建立要求時,類別驅動程式可能會初始化內部佇列,並將 IRP_MJ_INTERNAL_DEVICE_CONTROL 要求向下傳送至要求裝置組態資訊的對應埠驅動程式,或獨佔存取控制器埠。

  • 收到 IRP_MJ_CLOSE 表示已移除與目標裝置物件相關聯之檔案物件的最後一個參考。 這表示檔案物件的所有控制碼都已關閉,而且所有未完成的 I/O 要求都已完成或取消。

  • 在收到建立要求時,不常使用的裝置驅動程式可能會呼叫MmLockPagableCodeSection,讓某些驅動程式常式能夠處理其他IRP_MJ_XXX要求。 在收到相互關閉要求時,驅動程式可能會呼叫 MmUnlockPagableImageSection ,在關閉這類驅動程式的裝置物件 (關閉) 時,讓其可分頁影像區段分頁可節省系統記憶體。

某些驅動程式只會處理對稱 性IRP_MJ_CLOSE 要求,因為在受保護的子系統或較高層級驅動程式開啟其裝置物件之後,在系統本身關閉之前,不會關閉較低層級驅動程式的裝置物件。 例如,鍵盤和滑鼠驅動程式會設定裝置物件,代表在系統執行時必須運作的實體裝置,因此這些驅動程式可能會有最少 的 DispatchClose 常式來進行對稱,或可能合併 DispatchCreateClose 常式。

如果由較低層級驅動程式控制的裝置必須可供系統繼續執行,則通常不會呼叫驅動程式的 DispatchClose 常式。 例如,某些系統磁片磁碟機沒有 DispatchClose 常式,但這些驅動程式通常會有 DispatchFlushBuffersDispatchShutdown 常式,以在關閉系統之前完成任何未完成的檔案 I/O 作業。

雖然您可以實作個別 的DRIVER_DISPATCHDispatchClose 常式,但驅動程式有時會有 單一 DispatchCreateClose 常式 來處理建立和關閉要求。