IOCTL_CDROM_EXCLUSIVE_ACCESS IOCTL (ntddcdrm.h)
A solicitação IOCTL_CDROM_EXCLUSIVE_ACCESS instrui o driver de classe CD-ROM a:
- Relatar o estado de acesso de um dispositivo CD-ROM.
- Bloqueie um dispositivo CD-ROM para acesso exclusivo.
- Desbloqueie um dispositivo CD-ROM para acesso exclusivo.
Código principal
Buffer de entrada
Dependendo da operação que o chamador solicita, o chamador deve fornecer uma das seguintes estruturas como entrada em Irp-AssociatedIrp.SystemBuffer>:
-
CDROM_EXCLUSIVE_ACCESS (para relatar o estado de acesso de um dispositivo CD-ROM)
-
CDROM_EXCLUSIVE_LOCK (para bloquear um dispositivo CD-ROM para acesso exclusivo)
-
CDROM_EXCLUSIVE_ACCESS (para desbloquear um dispositivo CD-ROM bloqueado pelo aplicativo para acesso exclusivo)
Comprimento do buffer de entrada
O membro Parameters.DeviceIoControl.InputBufferLength na estrutura IO_STACK_LOCATION indica o tamanho, em bytes, do buffer de entrada alocado pelo usuário.
Buffer de saída
Se o chamador solicitar o estado de acesso exclusivo do dispositivo CD-ROM (RequestType = ExclusiveAccessQueryState), o driver de classe CD-ROM retornará uma estrutura de tipo CDROM_EXCLUSIVE_LOCK_STATE no buffer em Irp-AssociatedIrp.SystemBuffer>cujo membro LockState indica o estado de acesso do dispositivo.
Comprimento do buffer de saída
O membro Parameters.DeviceIoControl.OutputBufferLength no local da pilha de E/S (IO_STACK_LOCATION) indica o tamanho, em bytes, do buffer de saída.
Bloco de status
O campo Informações é definido como o número de bytes retornados. O campo Status será definido como STATUS_SUCCESS se a solicitação for bem-sucedida.
Se a solicitação falhar, o campo Status poderá ser definido como uma das seguintes mensagens de erro:
STATUS_ACCESS_DENIED (código de erro do Windows: ERROR_ACCESS_DENIED)
O dispositivo já está bloqueado para acesso exclusivo.
STATUS_BUFFER_TOO_SMALL (código de erro do Windows: ERROR_INSUFFICIENT_BUFFER)
O buffer de saída era muito pequeno para uma solicitação ExclusiveAccessQueryState .
STATUS_INFO_LENGTH_MISMATCH (código de erro do Windows: ERROR_BAD_LENGTH)
O buffer de entrada era muito pequeno.
STATUS_INVALID_DEVICE_REQUEST (código de erro do Windows: ERROR_INVALID_FUNCTION)
O driver de classe CD-ROM retorna esse código status quando ocorre um dos dois seguintes erros:
- O chamador fez a solicitação em um nível IRQL diferente de PASSIVE_LEVEL.
- O chamador enviou uma solicitação com RequestType = ExclusiveAccessUnlockDevice para desbloquear um dispositivo que não está no modo exclusivo.
STATUS_INVALID_DEVICE_STATE (código de erro do Windows: ERROR_BAD_COMMAND)
O chamador tentou bloquear um dispositivo enquanto o driver do sistema de arquivos estava montado neste dispositivo, sem especificar que o driver de classe deveria suspender o marcar para um driver do sistema de arquivos montado. Para suspender o marcar de um driver de sistema de arquivos montado, o chamador deve definir o membro Flags de CDROM_EXCLUSIVE_ACCESS como 1.
STATUS_INVALID_HANDLE (código de erro do Windows: ERROR_INVALID_HANDLE)
O driver de classe CD-ROM retorna esse código status quando ocorre um dos dois seguintes erros:
- O objeto de arquivo necessário para acompanhar a solicitação não estava disponível. O driver de classe CD-ROM não recebeu uma solicitação para criar um objeto de arquivo desse chamador.
- O chamador enviou uma solicitação com RequestType = ExclusiveAccessUnlockDevice para desbloquear um dispositivo, mesmo que o chamador não tenha acesso exclusivo ao dispositivo.
STATUS_INVALID_PARAMETER (código de erro do Windows: ERROR_INVALID_PARAMETER)
O driver de classe CD-ROM retorna esse código status quando ocorre um dos dois seguintes erros:
- O RequestType especificado não é um membro válido do EXCLUSIVE_ACCESS_REQUEST_TYPE.
- A cadeia de caracteres de nome do chamador no membro CallerName do CDROM_EXCLUSIVE_LOCK viola a convenção de nomenclatura. CallerName deve ser uma cadeia de caracteres terminada em NULL que contém os seguintes caracteres: alfanuméricos (A - Z, a - z, 0 - 9), espaços, períodos, vírgulas, dois-pontos (:), ponto e vírgula (;), hifens (-) e sublinhados (_). O comprimento da cadeia de caracteres deve ser menor que CDROM_EXCLUSIVE_CALLER_LENGTH bytes, incluindo o NULL no final da cadeia de caracteres.
Requisitos
Requisito | Valor |
---|---|
Cabeçalho | ntddcdrm.h (inclua Ntddcdrm.h) |