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.
Código principal
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>:
-
CDROM_EXCLUSIVE_ACCESS (para notificar el estado de acceso de un dispositivo CD-ROM)
-
CDROM_EXCLUSIVE_LOCK (para bloquear un dispositivo CD-ROM para acceso exclusivo)
-
CDROM_EXCLUSIVE_ACCESS (para desbloquear un dispositivo CD-ROM que la aplicación bloqueó para acceso exclusivo)
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) |