IOCTL_STORAGE_EJECTION_CONTROL IOCTL (ntddstor.h)

Блокирует устройство, чтобы предотвратить удаление носителя. Если драйвер может предотвратить удаление носителя во время использования диска, драйвер отключает или включает механизм, который извлекает носитель, тем самым блокируя диск. Вызывающий объект должен открыть устройство с FILE_READ_ATTRIBUTES для отправки этого запроса.

В отличие от IOCTL_STORAGE_MEDIA_REMOVAL, драйвер отслеживает IOCTL_STORAGE_EJECTION_CONTROL запросы вызывающей стороны и игнорирует запросы на разблокировку, для которых он не получил запрос на блокировку от того же вызывающего объекта, тем самым не позволяя другим вызывающим абонентам разблокировать диск.

Драйвер для устройства со съемным носителем может поддерживать этот IOCTL должен выполнять следующие действия:

  1. Сохраните счетчик блокировок, помеченный вызывающим объектом, в расширении объекта устройства.
  2. Сохраните количество блокировок для каждого физического устройства.
  3. Если при вызове с этим IOCTL установлен флаг предотвращения удаления носителя, увеличьте значение счетчика; Если флаг недоступен и драйвер ранее получал запрос на блокировку от того же вызывающего объекта, уменьшите счетчик.
  4. Запретить удаление носителя, если количество блокировок не равно нулю.
В обычных условиях вызывающий объект, который заблокировал устройство с помощью IOCTL_STORAGE_EJECTION_CONTROL, разблокирует устройство, повторно отправляя IOCTL_STORAGE_EJECTION_CONTROL с Irp->AssociatedIrp.SystemBuffer , для которого задано логическое значение FALSE. Однако иногда вызывающей не удается должным образом разблокировать устройство.

Чтобы обеспечить правильное снятие блокировок для удаления носителя, драйвер класса отслеживает абонентов, которые блокируют носитель с помощью IOCTL_STORAGE_EJECTION_CONTROL. Если вызывающий объект завершает работу без разблокировки устройства, драйвер класса разблокирует устройство.

Основной код

IRP_MJ_DEVICE_CONTROL

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

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

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

Длина логического значения.

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

Нет.

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

Нет.

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

Для поля Сведения задано значение ноль. Для поля Состояние задано значение STATUS_SUCCESS или, возможно, STATUS_INVALID_DEVICE_REQUEST, STATUS_NO_MEDIA_IN_DEVICE или STATUS_DEVICE_NOT_CONNECTED.

Требования

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

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

IOCTL_STORAGE_EJECT_MEDIA