IOCTL_MOUNTMGR_CHANGE_NOTIFY IOCTL (mountmgr.h)
Клиенты отправляют этот IOCTL диспетчеру подключений, чтобы получать сведения, когда в базе данных имени постоянного символьного канала диспетчера подключения изменяется.
Диспетчер подключений поддерживает счетчик с именем EpicNumber, который записывает количество изменений в базе данных постоянных имен с момента последнего запуска. Клиенты отправляют номер диспетчеру подключений с каждым запросом на уведомление об изменении IRP, а диспетчер подключений отвечает следующим образом:
Если номер, предоставленный клиентом, не равен EpicNumber, диспетчер подключений возвращает STATUS_SUCCESS, указывая, что изменения произошли с момента последнего сравнения его числа с EpicNumber диспетчера подключений.
Если номер, предоставленный клиентом, равен EpicNumber, диспетчер подключений интерпретирует это как запрос на следующее изменение в базу данных постоянных имен, и он очередирует IRP уведомления об изменении и возвращает STATUS_PENDING. Всякий раз, когда изменения происходят в базе данных, диспетчер подключения завершает все ожидающие уведомления об изменениях, тем самым информируя клиентов об изменении.
Клиент, который хочет получать сведения об изменениях в определенном томе, рекомендуется зарегистрировать уведомление о целевом устройстве Plug and Play и просмотреть GUID_IO_VOLUME_NAME_CHANGE.
Основной код
Входной буфер
Клиент диспетчера подключений инициализирует структуру MOUNTMGR_CHANGE_NOTIFY_INFO в начале буфера в Irp->AssociatedIrp.SystemBuffer.
Длина входного буфера
Parameters.DeviceIoControl.InputBufferLength в расположении стека ввода-вывода iRP указывает размер входного буфера в байтах, который должен быть больше или равен sizeof(MOUNTMGR_CHANGE_NOTIFY_INFO)
.
Выходной буфер
Диспетчер подключения возвращает текущую EpicNumber в структуре MOUNTMGR_CHANGE_NOTIFY_INFO в начале буфера в Irp->AssociatedIrp.SystemBuffer.
Длина выходного буфера
Никакой.
Буфер входных и выходных данных
N/A
Длина буфера ввода и вывода
N/A
Блок состояния
Если операция выполнена успешно, для поля состояния задано значение STATUS_SUCCESS, а для поля Information задано значение sizeof(MOUNTMGR_CHANGE_NOTIFY_INFO)
.
Если InputBufferLength меньше sizeof(MOUNTMGR_CHANGE_NOTIFY_INFO)
или OutputBufferLength меньше sizeof(MOUNTMGR_CHANGE_NOTIFY_INFO)
, поле состояние имеет значение STATUS_INVALID_PARAMETER.
Замечания
Дополнительные сведения см. в поддержке запросов диспетчера подключений вдрайвера класса хранилища.
Требования
Требование | Ценность |
---|---|
заголовка | mountmgr.h (include Mountmgr.h) |