IOCTL_MOUNTMGR_CHANGE_NOTIFY IOCTL (mountmgr.h)
Клиенты отправляют этот IOCTL диспетчеру подключений, чтобы получать информацию при каждом изменении в базе данных постоянных символических ссылок диспетчера подключений.
Диспетчер подключения поддерживает счетчик с именем EpicNumber , который записывает количество изменений, произошедших в базе данных постоянных имен с момента последнего запуска. Клиенты отправляют номер диспетчеру подключений с IRP каждого запроса на уведомление об изменении, и диспетчер подключения отвечает следующим образом:
Если номер, предоставленный клиентом, не равен EpicNumber, диспетчер подключения возвращает STATUS_SUCCESS, указывая на то, что с момента последнего сравнения клиентом своего номера с epicNumber диспетчера подключения.
Если номер, предоставленный клиентом, равен EpicNumber, диспетчер подключения интерпретирует это как запрос на уведомление о следующем изменении в базе данных постоянных имен и помещает в очередь IRP уведомления об изменениях и возвращает STATUS_PENDING. Каждый раз, когда происходит изменение в базе данных, диспетчер подключения завершает все ожидающие уведомления об изменениях IRP, тем самым информируя клиентов об изменении.
Клиенту, который только хочет получать информацию об изменениях в определенном томе, рекомендуется зарегистрироваться для уведомления о целевом устройстве 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>.
Длина выходного буфера
Нет.
Буфер входных и выходных данных
Н/Д
Длина входного/выходного буфера
Н/Д
Блок состояния
Если операция выполнена успешно, для поля Состояние устанавливается значение STATUS_SUCCESS, а для поля Сведения — значение sizeof(MOUNTMGR_CHANGE_NOTIFY_INFO)
.
Если inputBufferLength меньше sizeof(MOUNTMGR_CHANGE_NOTIFY_INFO)
или OutputBufferLength меньше sizeof(MOUNTMGR_CHANGE_NOTIFY_INFO)
, для поля Состояние устанавливается значение STATUS_INVALID_PARAMETER.
Комментарии
Дополнительные сведения см. в статье Поддержка запросов диспетчера подключений в драйвере класса хранения.
Требования
Требование | Значение |
---|---|
Заголовок | mountmgr.h (включая Mountmgr.h) |