IOCTL_STORAGE_MCN_CONTROL IOCTL (ntddstor.h)

Временно включает или отключает доставку пользовательских событий PnP GUID_IO_MEDIA_ARRIVAL и GUID_IO_MEDIA_REMOVAL на съемных носителях. Это, в свою очередь, включает или отключает обнаружение изменений мультимедиа (автозапуск) для устройства, если вызывающий объект открыл устройство с доступом FILE_READ_ATTRIBUTES и если на устройстве включен автозапуск в реестре. Вызывающий объект не должен открывать устройство для доступа на чтение или запись, иначе операция IOCTL завершится ошибкой. Этот IOCTL не влияет на параметр автозапуска в реестре.

Драйвер для такого устройства со съемным носителем должен выполнять следующие действия.

  1. Сохраните количество запросов на отключение для каждого физического устройства в расширении объекта устройства.
  2. Если при вызове с этим IOCTL установлен флаг отключения обнаружения изменений мультимедиа, увеличивается число; Если флажок недоступен, уменьшение счетчика.
  3. Задайте событие изменения носителя для устройства при изменении состояния носителя, только если число запросов на отключение равно нулю.
Когда IRP_MJ_DEVICE_CONTROL IRP, содержащий этот IOCTL, передается драйверу класса SCSI, член FileObject текущего IO_STACK_LOCATION должен указывать на допустимый объект файла. Драйверу класса SCSI требуется объект файла в случаях, когда приложение пользовательского режима, отключающее или включающее автозапуск, неожиданно завершает работу. В таких случаях драйвер класса SCSI использует объект файла для повторного обнаружения изменений мультимедиа. Так как файловый объект необходим для правильной очистки, драйвер класса SCSI приведет к сбою IRP с сообщением об ошибке STATUS_INVALID_PARAMETER если элемент FileObject IO_STACK_LOCATION не указывает на допустимый объект файла. Если приложение в пользовательском режиме открывает устройство, диспетчер ввода-вывода инициализирует этот элемент, но при создании IRP приложением пользовательского режима не следует предполагать, что FileObject будет правильно инициализирован при создании IRP приложением в пользовательском режиме. Если, например, приложение в пользовательском режиме по ошибке открывает устройство для доступа на чтение или запись перед отправкой IOCTL, то IRP управления устройством будет маршрутизироваться через файловую систему, что не позволит драйверу класса SCSI и драйверу устройства напрямую получить доступ к объекту файла устройства.

Основной код

IRP_MJ_DEVICE_CONTROL

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

Буфер в Irp-AssociatedIrp.SystemBuffer> содержит логическое значение, а значение TRUE указывает, что драйвер должен отключить обнаружение изменений мультимедиа.

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

Длина логического объекта.

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

Нет.

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

Нет.

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

Поле Сведения равно нулю. Для поля Состояние задано значение STATUS_SUCCESS или, возможно, STATUS_BUFFER_TOO_SMALL, STATUS_INVALID_PARAMETER или STATUS_INVALID_DEVICE_STATE.

Требования

Требование Значение
Заголовок ntddstor.h (включая Ntddstor.h)

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

IO_STACK_LOCATION