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


IOCTL_STORAGE_MCN_CONTROL IOCTL (ntddstor.h)

Временно включает или отключает доставку пользовательских событий PnP GUID_IO_MEDIA_ARRIVAL и GUID_IO_MEDIA_REMOVAL на съемных носителях. Это, в свою очередь, включает или отключает обнаружение изменений мультимедиа (AutoPlay) для устройства, если вызывающий пользователь открыл устройство с 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, если элемент IO_STACK_LOCATION FileObject fileObject IO_STACK_LOCATION не указывает на допустимый объект файла. Если приложение в пользовательском режиме открывает устройство, диспетчер ввода-вывода инициализирует этот элемент, но записи драйверов в режиме ядра не должны предполагать, что 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 (include Ntddstor.h)

См. также

IO_STACK_LOCATION