Compartir a través de


IOCTL_STORAGE_EJECTION_CONTROL IOCTL (ntddstor.h)

Bloquea el dispositivo para evitar la eliminación de los medios. Si el controlador puede impedir que los medios se quiten mientras la unidad está en uso, el controlador deshabilita o habilita el mecanismo que expulsa medios, bloqueando así la unidad. Un llamador debe abrir el dispositivo con FILE_READ_ATTRIBUTES para enviar esta solicitud.

A diferencia de IOCTL_STORAGE_MEDIA_REMOVAL, el controlador realiza un seguimiento de IOCTL_STORAGE_EJECTION_CONTROL solicitudes por llamador y omite las solicitudes de desbloqueo para las que no ha recibido una solicitud de bloqueo del mismo llamador, lo que impide que otros autores de llamadas desbloqueen la unidad.

Un controlador para un dispositivo multimedia extraíble: puede admitir este IOCTL debe hacer lo siguiente:

  1. Mantenga un recuento de bloqueos, etiquetado por llamador, en la extensión de objeto de dispositivo.
  2. Mantenga el recuento de bloqueos por dispositivo físico.
  3. Cuando se llama con este IOCTL, si se establece la marca para evitar quitar el medio, incremente el recuento; si la marca está desactivada y el controlador ha recibido previamente una solicitud de bloqueo del mismo autor de llamada, disminuye el recuento.
  4. Evite la eliminación de los medios a menos que todos los recuentos de bloqueos sean cero.
En circunstancias normales, el autor de la llamada que bloqueó el dispositivo mediante IOCTL_STORAGE_EJECTION_CONTROL, desbloquea el dispositivo enviando IOCTL_STORAGE_EJECTION_CONTROL de nuevo con Irp->AssociatedIrp.SystemBuffer establecido en un valor booleano de FALSE. Sin embargo, a veces el autor de la llamada no puede desbloquear el dispositivo correctamente.

Para asegurarse de que los bloqueos de eliminación de medios se liberan correctamente, el controlador de clase realiza un seguimiento de los autores de llamadas que bloquean el medio con IOCTL_STORAGE_EJECTION_CONTROL. Si el autor de la llamada finaliza sin desbloquear el dispositivo, el controlador de clase desbloquea el dispositivo.

Código principal

IRP_MJ_DEVICE_CONTROL

Búfer de entrada

El búfer de Irp-AssociatedIrp.SystemBuffer> contiene un valor booleano, con TRUE que indica que el controlador debe bloquear el medio en la unidad.

Longitud del búfer de entrada

Longitud de un valor booleano.

Búfer de salida

Ninguno.

Longitud del búfer de salida

Ninguno.

Bloque de estado

El campo Información se establece en cero. El campo Estado se establece en STATUS_SUCCESS, o posiblemente en STATUS_INVALID_DEVICE_REQUEST, STATUS_NO_MEDIA_IN_DEVICE o STATUS_DEVICE_NOT_CONNECTED.

Requisitos

Requisito Valor
Header ntddstor.h (incluya Ntddstor.h)

Consulte también

IOCTL_STORAGE_EJECT_MEDIA