IOCTL_MOUNTMGR_CHANGE_NOTIFY IOCTL (mountmgr.h)

Клиенты отправляют этот IOCTL диспетчеру подключений, чтобы получать информацию при каждом изменении в базе данных постоянного имени символьных ссылок диспетчера подключений.

Диспетчер подключений поддерживает счетчик с именем EpicNumber , который записывает количество изменений, внесенных в ее базу данных постоянных имен с момента последнего запуска. Клиенты отправляют диспетчеру подключений номер с IRP каждого запроса на уведомление об изменении, и диспетчер подключения отвечает следующим образом:

  • Если номер, предоставленный клиентом, не равен EpicNumber, диспетчер подключений возвращает STATUS_SUCCESS, указывая на то, что с тех пор, как клиент в последний раз сравнил свой номер с EpicNumber диспетчера подключений.
  • Если номер, предоставленный клиентом, равен EpicNumber, диспетчер подключения интерпретирует это как запрос на получение информации о следующем изменении в базе данных постоянных имен и помещает уведомление об изменении в очередь и возвращает STATUS_PENDING. Всякий раз, когда происходит изменение в базе данных, диспетчер подключения завершает все ожидающие уведомления об изменениях IRP, тем самым информируя клиентов об изменении.
Клиенту, который только хочет получать сведения об изменениях в определенном томе, рекомендуется зарегистрироваться для получения уведомлений о целевом устройстве Plug and Play и watch для GUID_IO_VOLUME_NAME_CHANGE.

Основной код

IRP_MJ_DEVICE_CONTROL

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

Клиент диспетчера подключений инициализирует структуру MOUNTMGR_CHANGE_NOTIFY_INFO, определенную в Mountmgr.h, в начале буфера в Irp-AssociatedIrp.SystemBuffer>.

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

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

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

Диспетчер подключения возвращает текущий элемент EpicNumber в структуре MOUNTMGR_CHANGE_NOTIFY_INFO, определенной в Mountmgr.h, в начале буфера в 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)

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

MOUNTMGR_CHANGE_NOTIFY_INFO