IOCTL_MOUNTMGR_QUERY_POINTS IOCTL (mountmgr.h)
此 IOCTL 會傳回三倍,其中包含磁碟區的持續符號連結名稱(也就是裝入點)、磁碟區的唯一標識符,以及磁碟區的非永久裝置名稱(例如 “\Device\HarddiskVolume1”。 這個 IOCTL 的輸入是包含單一三倍的 MOUNTMGR_MOUNT_POINT 結構。
如果輸入三重包含唯一標識碼或非持續性裝置名稱,要求會擷取所有相關聯的裝入點(符號連結),包括磁碟區 GUID 路徑名稱和驅動器號。 不過,如果輸入三重具有符號連結,但未指定唯一標識碼或裝置名稱,則要求只會傳回單一三倍,其中包含輸入中提供的符號連結,以及唯一標識符和裝置名稱。 呼叫端必須提交另一個具有唯一標識碼或裝置名稱的 IOCTL,才能擷取剩餘的裝入點。
如果輸入三重是空的,掛接管理員會傳回整個掛接的裝置清單。
掛接管理員會傳回三倍,符合呼叫端所提供的資訊。 如果呼叫端提交唯一標識碼,掛接管理員會傳回具有該唯一標識碼的所有三倍。 如果呼叫端輸入磁碟區路徑名稱或驅動器號做為符號連結名稱,掛接管理員只會傳回符號連結的三倍。 每個符號連結都有一個專案。 如果呼叫端輸入裝置路徑名稱,掛接管理員只會傳回該裝置路徑名稱的三倍。 如果呼叫端輸入唯一標識符和符號連結,則掛接管理員只會傳回該符號連結的一個專案。 呼叫端會執行此動作以取得裝置路徑名稱。 如果呼叫端未輸入任何裝置路徑名稱、唯一標識碼或符號連結,掛接管理員會傳回所有專案/三倍。
主要程序代碼
輸入緩衝區
掛接管理員用戶端會在 Irp->AssociatedIrp.SystemBuffer緩衝區開頭初始化 MOUNTMGR_MOUNT_POINT 結構。 緊接在此結構之後,MM 用戶端會依該順序載入符號連結名稱、唯一標識元和裝置名稱。
輸入緩衝區長度
Parameters.DeviceIoControl.InputBufferLength 在 IRP 的 I/O 堆棧位置,表示輸入緩衝區的大小,以位元組為單位,其必須大於或等於 sizeof(MOUNTMGR_MOUNT_POINT)
。
輸出緩衝區
掛接管理員會在 Irp->AssociatedIrp.SystemBuffer的緩衝區開頭初始化類型 MOUNTMGR_MOUNT_POINTS 的可變長度結構。 掛接管理員會將與指示磁碟區相關聯的裝入點插入 MountPoints[] 所指向的位址, 這個結構的成員。 每個載入點都會以這個 IOCTL Input 區段中定義的MOUNTMGR_MOUNT_POINT結構來表示。
輸出緩衝區長度
Parameters.DeviceIoControl.OutputBufferLength 在 IRP 的 I/O 堆棧位置,表示輸出緩衝區的大小,以位元組為單位,輸出緩衝區的大小必須大於或等於 sizeof(MOUNTMGR_MOUNT_POINTS)
。
輸入/輸出緩衝區
N/A
輸入/輸出緩衝區長度
N/A
狀態區塊
如果作業成功,[狀態] 字段會設定為 [STATUS_SUCCESS]。
如果在掛接的裝置清單中找不到唯一標識碼或非固定裝置名稱,[狀態] 字段會設定為 [STATUS_INVALID_PARAMETER]。
如果 inputBufferLength 小於 sizeof(MOUNTMGR_MOUNT_POINT)
,則會將 [狀態] 字段設定為 [STATUS_INVALID_PARAMETER]。
如果 InputBufferLength 小於三個輸入標識符字串的總長度,Status 欄位會設定為 STATUS_INVALID_PARAMETER。
如果 outputBufferLength 小於 sizeof(MOUNTMGR_MOUNT_POINT)
,則會將 [狀態] 字段設定為 [STATUS_INVALID_PARAMETER]。
如果 OutputBufferLength 小於 sizeof(MOUNTMGR_MOUNT_POINTS)
加上裝入點三倍的大小總和,Status 欄位會設定為 STATUS_BUFFER_OVERFLOW。
如果三個字串中的任何一個包含在三個字元串中的任何一個都對齊奇數位址(例如,address & 01 != 0),則 [狀態] 字段會設定為 [STATUS_INVALID_PARAMETER]。
言論
如需詳細資訊,請參閱 在記憶體類別驅動程式中支援掛接管理員要求。
要求
要求 | 價值 |
---|---|
標頭 | mountmgr.h (包括 Mountmgr.h) |