Поделиться через


IOCTL_MOUNTMGR_QUERY_POINTS IOCTL (mountmgr.h)

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

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

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

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

Основной код

IRP_MJ_DEVICE_CONTROL

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

Клиент диспетчера подключений инициализирует структуру 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).

Буфер входных и выходных данных

N/A

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

N/A

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

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

См. также

MOUNTMGR_MOUNT_POINTS