IOCTL_MOUNTMGR_QUERY_POINTS IOCTL (mountmgr.h)

此 IOCTL 會傳回三倍,其中包含磁碟區 (的持續符號連結名稱,也就是裝入點) 、磁碟區的唯一標識符,以及磁碟區的非永久性裝置名稱 (,例如磁碟區的 “\Device\HarddiskVolume1”) 。 這個 IOCTL 的輸入是包含單一三倍MOUNTMGR_MOUNT_POINT結構。

如果輸入三重包含唯一標識碼或非持續性裝置名稱,要求會擷取所有相關聯的裝入點 (符號連結) ,包括磁碟區 GUID 路徑名稱和驅動器號。 不過,如果輸入三重項具有符號連結,但未指定唯一標識碼或裝置名稱,則要求只會傳回單一三倍,其中包含輸入中提供的符號連結,以及唯一標識碼和裝置名稱。 呼叫端必須提交另一個具有唯一標識碼或裝置名稱的 IOCTL,才能擷取剩餘的裝入點。

如果輸入三倍是空的,掛接管理員會傳回整個掛接的裝置清單。

掛接管理員會傳回三倍,其符合呼叫端所提供的資訊量。 如果呼叫端提交唯一標識碼,掛接管理員會傳回具有該唯一標識碼的所有三倍。 如果呼叫端將磁碟區路徑名稱或驅動器號輸入為符號連結名稱,掛接管理員只會傳回符號連結的三倍。 每個符號連結都有一個專案。 如果呼叫端輸入裝置路徑名稱,掛接管理員只會傳回該裝置路徑名稱的三倍。 如果呼叫端輸入唯一標識符和符號連結,則掛接管理員只會傳回該符號連結的一個專案。 呼叫端會執行此動作以取得裝置路徑名稱。 如果呼叫端未輸入任何裝置路徑名稱、唯一標識碼或符號連結,則掛接管理員會傳回所有專案/三重專案。

主要程序代碼

IRP_MJ_DEVICE_CONTROL

輸入緩衝區

掛接管理員用戶端會在 Irp-AssociatedIrp.SystemBuffer> 緩衝區的開頭,初始化 Mountmgr.h 中定義的MOUNTMGR_MOUNT_POINT結構。 緊接在此結構之後,MM 用戶端會依該順序載入符號連結名稱、唯一標識元和裝置名稱。

輸入緩衝區長度

IRP I/O 堆棧位置中的 Parameters.DeviceIoControl.InputBufferLength 表示輸入緩衝區的大小,以位元組為單位,這必須大於或等於 sizeof (MOUNTMGR_MOUNT_POINT) 。

輸出緩衝區

裝載管理員會在 Irp-AssociatedIrp.SystemBuffer> 的緩衝區開頭,初始化類型為 MOUNTMGR_MOUNT_POINTS 的可變長度結構MOUNTMGR_MOUNT_POINTS。 裝載管理員會在 這個 結構的 MountPoints[] 成員所指向的位址插入與指定磁碟區相關聯的裝入點。 每個裝入點都會以這個 IOCTL 的 Input 區段中定義的MOUNTMGR_MOUNT_POINT結構來表示。

狀態區塊

如果作業成功, [狀態] 字段會設定為 [STATUS_SUCCESS]。

如果在掛接的磁碟區裝置清單中找不到唯一標識符或非持續性裝置名稱, [狀態 ] 字段會設定為 [STATUS_INVALID_PARAMETER]。

如果 InputBufferLength 小於 sizeof (MOUNTMGR_MOUNT_POINT) , [狀態 ] 字段會設定為 [STATUS_INVALID_PARAMETER]。

如果 InputBufferLength 小於三個輸入標識符字串的總長度, [狀態 ] 字段會設定為 [STATUS_INVALID_PARAMETER]。

如果 OutputBufferLength 小於 sizeof (MOUNTMGR_MOUNT_POINT) , [狀態] 字段會設定為 [STATUS_INVALID_PARAMETER]。

如果 OutputBufferLength 小於 sizeof (MOUNTMGR_MOUNT_POINTS) 加上裝入點三倍的大小總和, 則 [狀態 ] 字段會設定為 [STATUS_BUFFER_OVERFLOW]。

例如,如果在奇數位址 (上對齊包含三個字串的其中一個字串,則 address & 01 != 0) , 則 [狀態 ] 字段會設定為 [STATUS_INVALID_PARAMETER]。

規格需求

需求
標頭 mountmgr.h (包括 Mountmgr.h)

另請參閱

MOUNTMGR_MOUNT_POINTS