IOCTL_MOUNTMGR_QUERY_POINTS IOCTL (mountmgr.h)
Этот IOCTL возвращает тройное значение, состоящее из постоянного символьного имени ссылки для тома (то есть точки подключения), уникального идентификатора тома и неперсистентного имени устройства (например, "\Device\HarddiskVolume1") для тома. Входными данными для этого IOCTL является MOUNTMGR_MOUNT_POINT структура, содержащая один тройной.
Если входная тройная строка содержит уникальный идентификатор или непостоянное имя устройства, запрос получает все связанные точки подключения (символические ссылки), включая путь GUID тома и буквы диска. Однако если входной тройной элемент имеет символьную ссылку, но не указывает ни уникальный идентификатор, ни имя устройства, запрос возвращает только одну тройную, содержащую символьную ссылку, указанную во входных данных, вместе с уникальным идентификатором и именем устройства. Вызывающий объект должен отправить другой IOCTL с уникальным идентификатором или именем устройства, чтобы получить оставшиеся точки подключения.
Если входной тройной номер пуст, диспетчер подключения возвращает весь список подключенных устройств.
Диспетчер подключения возвращает тройное значение, соответствующее тому объему информации, который предоставляется вызывающим абонентом. Если вызывающий объект отправляет уникальный идентификатор, диспетчер подключения возвращает все тройники с этим уникальным идентификатором. Если вызывающий объект вводит путь тома или букву диска в качестве символьного имени ссылки, диспетчер подключения возвращает только тройное значение для символьной ссылки. На символьную ссылку имеется одна запись. Если вызывающий объект вводит путь устройства, диспетчер подключения возвращает только три значения для этого пути устройства. Если вызывающий объект вводит уникальный идентификатор и символьную ссылку, диспетчер подключения возвращает только одну запись для этой символьной ссылки. Вызывающий объект будет делать это, чтобы получить путь к устройству. Если вызывающий объект не вводит путь устройства, уникальный идентификатор или символьную ссылку, диспетчер подключения возвращает все записи или три значения.
Основной код
Входной буфер
Клиент диспетчера подключений инициализирует структуру MOUNTMGR_MOUNT_POINT в начале буфера в Irp-AssociatedIrp.SystemBuffer>. Сразу после этой структуры клиент MM загружает символьное имя ссылки, уникальный идентификатор и имя устройства в указанном порядке.
Длина входного буфера
Parameters.DeviceIoControl.InputBufferLength в расположении стека ввода-вывода IRP указывает размер входного буфера в байтах, который должен быть больше или равен sizeof(MOUNTMGR_MOUNT_POINT)
.
Выходной буфер
Диспетчер подключения инициализирует структуру переменной длины типа MOUNTMGR_MOUNT_POINTS в начале буфера в Irp-AssociatedIrp.SystemBuffer>. Диспетчер подключения вставляет точки подключения, связанные с указанным томом, по адресу, на который указывает член MountPoints[] этой структуры. Каждая точка подключения представлена структурой MOUNTMGR_MOUNT_POINT, как определено в разделе Входные данные для этого IOCTL.
Длина выходного буфера
Parameters.DeviceIoControl.OutputBufferLength в расположении стека ввода-вывода IRP указывает размер выходного буфера в байтах, который должен быть больше или равен sizeof(MOUNTMGR_MOUNT_POINTS)
.
Буфер входных и выходных данных
Н/Д
Длина входного/выходного буфера
Н/Д
Блок состояния
Если операция выполнена успешно, в поле Состояние устанавливается значение 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) |