支援儲存體類別驅動程式中的掛接管理員要求

掛接管理員 (MM) 負責管理磁片區名稱。 針對每個磁片區,它會儲存唯一的名稱,而且會永久識別磁片區,即使磁片區已從系統移除也一般。 它也會管理較不永久的名稱,例如在重新開機期間保存的磁碟機號,但其指派可能會隨著磁片區新增或從系統移除而變更。

掛接管理員藉由建立磁片區裝置物件的符號連結,為系統中的每個磁片區提供唯一的介面。 由於符號連結本身及其目標裝置物件不會在系統重新開機時保存,所以掛接管理員會保留登錄中永續性名稱資料庫中的符號連結名稱

這個符號連結名稱稱為唯一的 磁片區名稱。 如同傳統的磁片區標籤,它會在系統重新開機時保存,但就像磁碟機號一樣,而且不同于磁片區標籤,它是唯一的。 唯一磁片區名稱的格式為:

"\??\Volume{GUID}\

其中 GUID 是識別磁片區的全域唯一識別碼。

掛接管理員的永續性名稱資料庫位於登錄 (HKLM/SYSTEM/MountedDevices) 之 SYSTEM hive 的MountedDevices登錄機碼中。 除了唯一的磁片區名稱之外,掛接管理員也會將 掛接點 名稱儲存在其永續性名稱資料庫中。 掛接點名稱可以進一步細分成兩個類別:Win32 樣式路徑名稱,做為掛接磁片區檔案系統的根目錄,以及磁碟機號。

資料庫中的每個永續性符號連結名稱都會顯示為 MountedDevices 機碼下登錄值的名稱,並伴隨 一識別碼。 唯一識別碼是磁片區的另一個唯一識別碼, (不同于唯一磁片區名稱) 。 它有助於識別哪些可能有許多持續性符號連結名稱參考相同的磁片區。

例如,具有唯一磁片區名稱的單一磁片區名稱 為 「\\?\Volume{7603f260-142a-11d4-ac67-806d6172696f }\\ 」 可能有隨附的磁碟機號 「\DosDevices\D:」 和兩個掛接點 「\DosDevices\C:\mymount」 和 「\DosDevices\E:\FilesysD\mnt」。 這會在掛接管理員的永續性符號連結名稱資料庫中產生四個專案:一個用於唯一磁片區名稱、一個用於磁碟機號,另一個用於兩個掛接點名稱。 這四個專案都會共用相同的唯一識別碼。因此,檢視 MountedDevices 登錄機碼的人員能夠偵測到這四個持續性名稱都指向相同的磁片區。

下列建立快照說明永續性名稱如何出現在 MountedDevices 登錄機碼中。

螢幕擷取畫面,說明永續性名稱如何出現在 mounteddevices 登錄機碼中。

掛接管理員依賴隨插即用裝置介面通知機制來警示其磁片區抵達和移除。 因此,每個用戶端 (也就是每個磁片區驅動程式,通常是類別驅動程式) 必須藉由呼叫 IoRegisterDeviceInterface 在MOUNTDEV_MOUNTED_DEVICE_GUID介面類別別中建立介面,以通知掛接管理員所管理磁片區系統中的抵達。 MOUNTDEV_MOUNTED_DEVICE_GUID介面類別別 GUID 定義于 mountmgr.h中。

收到磁片區介面抵達的隨插即用通知時,掛接管理員會傳送用戶端三個裝置控制 IRP:

為了回應這三個 IOCTLs,用戶端應該傳回磁片區的非永久性裝置物件名稱 (或目標名稱) 分別位於系統物件樹狀目錄的 Device 目錄中 ( :「\Device\HarddiskVolume1」) 、唯一磁片區識別碼,以及磁片區的建議永續性符號連結名稱。 雖然用戶端可以選擇忽略 IOCTL_MOUNTDEV_QUERY_SUGGESTED_LINK_NAME,但在接收 IOCTL_MOUNTDEV_QUERY_DEVICE_NAME 或IOCTL_MOUNTDEV_QUERY_UNIQUE_ID時,必須提供唯一的磁片區識別碼。 掛接管理員完全依賴用戶端來提供唯一的磁片區識別碼,如果用戶端未提供它,則掛接管理員無法將磁碟機號等掛接點指派給磁片區。

如需這些 IOCTL 的詳細資訊,請參閱 由掛接管理員傳送的 I/O 控制項代碼

如果用戶端警示其磁片區抵達的掛接管理員,但在查詢時無法為磁片區提供唯一識別碼,磁片區就會放置在 已掛接的裝置 清單中。 發生這種情況時,用戶端可以將 IOCTL_MOUNTMGR_CHECK_UNPROCESSED_VOLUMES IOCTL 傳送給掛接管理員,要求掛接管理員重新掃描其死掛接的裝置清單,並嘗試在另一次嘗試查詢其個別磁片區的唯一識別碼清單上的用戶端。 如需IOCTL_MOUNTMGR_xxx IOCTL 的詳細資訊,請參閱 由掛接管理員用戶端傳送的 I/O 控制碼

在掛接管理員收到新導入磁片區的唯一磁片區識別碼之後,它會搜尋其資料庫中指派給該唯一識別碼的所有持續性名稱,並針對每個持續性符號連結名稱建立磁片區的符號連結。

當掛接管理員偵測到磁片區已離線時,它會刪除指向裝置物件的符號連結,而不會刪除掛接管理員資料庫中對應的符號連結名稱。

如需掛接管理員用戶端如何建立永續性符號名稱的資訊,請參閱 IOCTL_MOUNTMGR_CREATE_POINT