IOCTL_MOUNTMGR_QUERY_POINTS IOCTL (mountmgr.h)

Этот IOCTL возвращает тройное значение, состоящее из постоянного символьного имени ссылки для тома (то есть точки подключения), уникального идентификатора тома и неперсистентного имени устройства (например, "\Device\HarddiskVolume1") для тома. Входными данными для этого IOCTL является MOUNTMGR_MOUNT_POINT структура, содержащая один тройной.

Если входная тройная строка содержит уникальный идентификатор или непостоянное имя устройства, запрос получает все связанные точки подключения (символические ссылки), включая путь GUID тома и буквы диска. Однако если входной тройной элемент имеет символьную ссылку, но не указывает ни уникальный идентификатор, ни имя устройства, запрос возвращает только одну тройную, содержащую символьную ссылку, указанную во входных данных, вместе с уникальным идентификатором и именем устройства. Вызывающий объект должен отправить другой IOCTL с уникальным идентификатором или именем устройства, чтобы получить оставшиеся точки подключения.

Если входной тройной номер пуст, диспетчер подключения возвращает весь список подключенных устройств.

Диспетчер подключения возвращает тройное значение, соответствующее тому объему информации, который предоставляется вызывающим абонентом. Если вызывающий объект отправляет уникальный идентификатор, диспетчер подключения возвращает все тройники с этим уникальным идентификатором. Если вызывающий объект вводит путь тома или букву диска в качестве символьного имени ссылки, диспетчер подключения возвращает только тройное значение для символьной ссылки. На символьную ссылку имеется одна запись. Если вызывающий объект вводит путь устройства, диспетчер подключения возвращает только три значения для этого пути устройства. Если вызывающий объект вводит уникальный идентификатор и символьную ссылку, диспетчер подключения возвращает только одну запись для этой символьной ссылки. Вызывающий объект будет делать это, чтобы получить путь к устройству. Если вызывающий объект не вводит путь устройства, уникальный идентификатор или символьную ссылку, диспетчер подключения возвращает все записи или три значения.

Основной код

IRP_MJ_DEVICE_CONTROL

Входной буфер

Клиент диспетчера подключений инициализирует структуру MOUNTMGR_MOUNT_POINT, определенную в Mountmgr.h, в начале буфера в Irp-AssociatedIrp.SystemBuffer>. Сразу после этой структуры клиент MM загружает символьное имя ссылки, уникальный идентификатор и имя устройства в указанном порядке.

Длина входного буфера

Parameters.DeviceIoControl.InputBufferLength в расположении стека ввода-вывода IRP указывает размер входного буфера в байтах, который должен быть больше или равен sizeof(MOUNTMGR_MOUNT_POINT).

Выходной буфер

Диспетчер подключения инициализирует структуру переменной длины типа MOUNTMGR_MOUNT_POINTS, определенную в Mountmgr.h, в начале буфера в Irp-AssociatedIrp.SystemBuffer>. Диспетчер подключения вставляет точки подключения, связанные с указанным томом, по адресу, на который указывает член MountPoints[] этой структуры. Каждая точка подключения представлена структурой MOUNTMGR_MOUNT_POINT, как определено в разделе Входные данные для этого IOCTL.

Блок состояния

Если операция выполнена успешно, в поле Состояние устанавливается значение 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.

Если какая-либо из трех строк, содержащихся в любом из тройных значений, выравнивается по нечетным адресам (например, адрес & 01 != 0), для поля Состояние устанавливается значение STATUS_INVALID_PARAMETER.

Требования

Требование Значение
Заголовок mountmgr.h (включая Mountmgr.h)

См. также раздел

MOUNTMGR_MOUNT_POINTS