Compartir a través de


IOCTL_CDROM_EXCLUSIVE_ACCESS IOCTL (ntddcdrm.h)

La solicitud de IOCTL_CDROM_EXCLUSIVE_ACCESS indica al controlador de clase CD-ROM que:

  • Notificar el estado de acceso de un dispositivo CD-ROM.
  • Bloquear un dispositivo CD-ROM para el acceso exclusivo.
  • Desbloquee un dispositivo CD-ROM para el acceso exclusivo.
Debe existir un identificador FileObject válido para que este IOCTL se realice correctamente. El identificador FileObject protege el sistema de la terminación inesperada de la aplicación o la adquisición accidental de un bloqueo de acceso exclusivo sin liberarlo posteriormente. Un identificador FileObject válido es necesario porque cuando se cierra una aplicación, el controlador de clase CD-ROM recibirá paquetes de solicitud de E/S CLEANUP y CLOSE (IRP), que puede usar para liberar automáticamente un bloqueo de acceso exclusivo obtenido por ese identificador. Este método sencillo protege contra la mayoría de las versiones accidentales del acceso exclusivo. Cualquier método utilizado para evitar esta funcionalidad puede reducir la seguridad y eficacia del método de bloqueo de acceso exclusivo.

Código principal

IRP_MJ_DEVICE_CONTROL

Búfer de entrada

En función de la operación que solicite el autor de la llamada, el autor de la llamada debe proporcionar una de las siguientes estructuras como entrada en Irp-AssociatedIrp.SystemBuffer>:

Longitud del búfer de entrada

El miembro Parameters.DeviceIoControl.InputBufferLength de la estructura IO_STACK_LOCATION indica el tamaño, en bytes, del búfer de entrada asignado por el usuario.

Búfer de salida

Si el autor de la llamada solicita el estado de acceso exclusivo del dispositivo CD-ROM (RequestType = ExclusiveAccessQueryState), el controlador de clase CD-ROM devuelve una estructura de tipo CDROM_EXCLUSIVE_LOCK_STATE en el búfer en Irp-AssociatedIrp.SystemBuffer>cuyo miembro LockState indica el estado de acceso del dispositivo.

Longitud del búfer de salida

El miembro Parameters.DeviceIoControl.OutputBufferLength en la ubicación de la pila de E/S (IO_STACK_LOCATION) indica el tamaño, en bytes, del búfer de salida.

Bloque de estado

El campo Información se establece en el número de bytes que se devuelven. El campo Estado se establece en STATUS_SUCCESS si la solicitud se realiza correctamente.

Si se produce un error en la solicitud, el campo Estado puede establecerse en uno de los siguientes mensajes de error:

STATUS_ACCESS_DENIED (código de error de Windows: ERROR_ACCESS_DENIED)

El dispositivo ya está bloqueado para el acceso exclusivo.

STATUS_BUFFER_TOO_SMALL (código de error de Windows: ERROR_INSUFFICIENT_BUFFER)

El búfer de salida era demasiado pequeño para una solicitud ExclusiveAccessQueryState .

STATUS_INFO_LENGTH_MISMATCH (código de error de Windows: ERROR_BAD_LENGTH)

El búfer de entrada era demasiado pequeño.

STATUS_INVALID_DEVICE_REQUEST (código de error de Windows: ERROR_INVALID_FUNCTION)

El controlador de clase CD-ROM devuelve este código de estado cuando se produce uno de los dos errores siguientes:

  • El autor de la llamada realizó la solicitud en un nivel IRQL distinto de PASSIVE_LEVEL.
  • El autor de la llamada envió una solicitud con RequestType = ExclusiveAccessUnlockDevice para desbloquear un dispositivo que no está en modo exclusivo.

STATUS_INVALID_DEVICE_STATE (código de error de Windows: ERROR_BAD_COMMAND)

El autor de la llamada intentó bloquear un dispositivo mientras el controlador del sistema de archivos estaba montado en este dispositivo, sin especificar que el controlador de clase debe suspender la comprobación de un controlador del sistema de archivos montado. Para suspender la comprobación de un controlador del sistema de archivos montado, el autor de la llamada debe establecer el miembro Flags de CDROM_EXCLUSIVE_ACCESS en 1.

STATUS_INVALID_HANDLE (código de error de Windows: ERROR_INVALID_HANDLE)

El controlador de clase CD-ROM devuelve este código de estado cuando se produce uno de los dos errores siguientes:

  • El objeto de archivo necesario para realizar un seguimiento de la solicitud no estaba disponible. El controlador de clase CD-ROM no recibió una solicitud para crear un objeto de archivo a partir de este llamador.
  • El autor de la llamada envió una solicitud con RequestType = ExclusiveAccessUnlockDevice para desbloquear un dispositivo, aunque el autor de la llamada no tenga acceso exclusivo al dispositivo.

STATUS_INVALID_PARAMETER (código de error de Windows: ERROR_INVALID_PARAMETER)

El controlador de clase CD-ROM devuelve este código de estado cuando se produce uno de los dos errores siguientes:

  • RequestType que se especificó no es un miembro válido de EXCLUSIVE_ACCESS_REQUEST_TYPE.
  • La cadena de nombre del autor de llamada del miembro CallerName de CDROM_EXCLUSIVE_LOCK infringe la convención de nomenclatura. CallerName debe ser una cadena terminada en NULL que contenga los siguientes caracteres: alfanuméricos (A - Z, a - z, 0 - 9), espacios, puntos, comas, dos puntos (:), punto y comas (;), guiones (-) y caracteres de subrayado (_). La longitud de la cadena debe ser menor que CDROM_EXCLUSIVE_CALLER_LENGTH bytes, incluido el valor NULL al final de la cadena.

Requisitos

Requisito Valor
Header ntddcdrm.h (incluya Ntddcdrm.h)

Consulte también

CDROM_EXCLUSIVE_ACCESS

CDROM_EXCLUSIVE_LOCK

CDROM_EXCLUSIVE_LOCK_STATE

EXCLUSIVE_ACCESS_REQUEST_TYPE

IO_STACK_LOCATION