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.
Um identificador FileObject válido deve existir para que esse IOCTL tenha êxito. O identificador FileObject protege o sistema contra terminação de aplicativo inesperada ou aquisição acidental de um bloqueio de acesso exclusivo sem a versão subsequente do bloqueio de acesso exclusivo. Um identificador FileObject válido é necessário porque, quando um aplicativo é fechado, o driver de classe CD-ROM receberá IRPs (Pacotes de Solicitação de E/S) CLEANUP e CLOSE, que ele pode usar para liberar automaticamente um bloqueio de acesso exclusivo obtido por esse identificador. Esse método simples protege contra a maioria das versões acidentais de acesso exclusivo. Todos os métodos usados para evitar essa funcionalidade podem reduzir a segurança e a eficácia do método de bloqueio de acesso exclusivo.

Código principal

IRP_MJ_DEVICE_CONTROL

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>:

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)

Confira também

CDROM_EXCLUSIVE_ACCESS

CDROM_EXCLUSIVE_LOCK

CDROM_EXCLUSIVE_LOCK_STATE

EXCLUSIVE_ACCESS_REQUEST_TYPE

IO_STACK_LOCATION