Compartilhar via


Modo de Acesso Exclusivo cd-ROM

O mecanismo de acesso exclusivo cd-ROM (também conhecido como modo de acesso exclusivo) permite que aplicativos e componentes do sistema obtenham acesso exclusivo a um dispositivo CD-ROM. Os aplicativos que exigem acesso exclusivo a dispositivos CD-ROM incluem os seguintes exemplos:

Aplicativos ópticos de criação de mídia
Alguns softwares de criação óptica exigem acesso exclusivo a um dispositivo CD-ROM para gravar dados sem interrupção de outros aplicativos. Caso contrário, os dados poderão ser gravados incorretamente, causando corrupção de dados.

Utilitários de atualização de firmware
Muitos fabricantes de dispositivos CD-ROM fornecem um utilitário de atualização de firmware. Se um aplicativo enviar um comando para o dispositivo durante uma atualização de firmware, ele poderá tornar o dispositivo inutilizável.

Sem o mecanismo de acesso exclusivo, a única maneira de os fornecedores concederem a esses dois tipos de acesso exclusivo a aplicativos seria instalar um driver de filtro personalizado que falha nas solicitações de E/S de outros aplicativos e componentes, e essa abordagem causa instabilidade do sistema. Você não deve usar drivers de filtro para obter acesso exclusivo a dispositivos CD-ROM.

Para usar o mecanismo de acesso exclusivo, os aplicativos devem enviar uma solicitação IOCTL_CDROM_EXCLUSIVE_ACCESS para o driver da classe CD-ROM em PASSIVE_LEVEL IRQL. Quando o chamador faz essa solicitação, o chamador deve fornecer uma cadeia de caracteres de identificação no membro CallerName do CDROM_EXCLUSIVE_LOCK. O driver de classe usa essa cadeia de caracteres para identificar o aplicativo que tem acesso exclusivo.

Os aplicativos devem consultar o estado atual do dispositivo antes de tentar bloqueá-lo. Se o dispositivo já estiver bloqueado, o driver de classe retornará a cadeia de caracteres de identificação do proprietário atual do dispositivo. Antes de bloquear o dispositivo, o chamador deve abri-lo no modo de acesso de leitura/gravação. Portanto, o chamador deve ter privilégios de administrador ou permissão para abrir o dispositivo CD-ROM no modo de acesso de gravação.

Os chamadores que solicitam acesso exclusivo não devem abrir o dispositivo CD-ROM simplesmente enviando uma solicitação de criação para o driver do sistema de arquivos, pois não há garantia de que o driver de classe CD-ROM receberá a solicitação. Em vez disso, os aplicativos devem usar as rotinas SetupDiXxx para enumerar as interfaces para todos os dispositivos CD-ROM no sistema e, em seguida, abrir a interface de dispositivo apropriada.

Quando um chamador abre um dispositivo usando a letra da unidade ou nomes como CdRom0 com o modo de acesso definido como 0, é garantido que o driver do sistema de arquivos passe a solicitação de criação para o driver de classe CD-ROM. Mas essa garantia ainda não é suficiente porque o identificador que o aplicativo obtém por esse procedimento não dá ao chamador acesso de leitura/gravação ao dispositivo.

O modo de acesso exclusivo tem as seguintes características:

  • Somente o proprietário do bloqueio de acesso exclusivo pode acessar o dispositivo.

  • O sistema falha nas solicitações de acesso de outros aplicativos.

  • O sistema processa Plug and Play (PnP) e IRPs (pacotes de solicitação de E/S) de energia da maneira típica.

  • A notificação de alteração de mídia está desabilitada para o dispositivo.

  • O sistema falha nas solicitações para abrir o dispositivo enquanto ele está bloqueado.

  • Outros aplicativos que enviam uma solicitação de IOCTL_STORAGE_QUERY_PROPERTY para o driver de classe CD-ROM receberão informações armazenadas em cache do dispositivo enquanto ele estiver bloqueado. Especificamente, se o STORAGE_QUERY_TYPE for PropertyExistsQuery, o IOCTL se comportará da mesma forma que quando o dispositivo não estiver bloqueado. Além disso, se o STORAGE_QUERY_TYPE for PropertyStandardQuery e o STORAGE_PROPERTY_ID for StorageDeviceProperty ou StorageAdapterProperty, o IOCTL retornará informações armazenadas em cache no driver de classe CD-ROM. Com outras combinações de STORAGE_QUERY_TYPE e STORAGE_PROPERTY_ID, o IOCTL falha com o valor status STATUS_ACCESS_DENIED.

  • Outros aplicativos que enviam uma solicitação IOCTL_CDROM_GET_INQUIRY_DATA para o driver da classe CD-ROM recebem informações armazenadas em cache do dispositivo enquanto ele está bloqueado e também quando ele é desbloqueado.

O sistema remove o acesso exclusivo a um dispositivo CD-ROM quando qualquer um dos seguintes ocorre:

  • O proprietário do bloqueio de acesso exclusivo envia uma solicitação de IOCTL_CDROM_EXCLUSIVE_ACCESS para o driver de classe CD-ROM com o membro RequestType de CDROM_EXCLUSIVE_ACCESS definido como ExclusiveAccessUnlockDevice.

  • O proprietário do bloqueio de acesso exclusivo fecha o identificador do dispositivo.

  • O aplicativo que possui o bloqueio de acesso exclusivo é encerrado.

Depois de remover o bloqueio de acesso exclusivo em um dispositivo, o driver da classe CD-ROM executa as seguintes ações:

  • Habilita a notificação de alteração de mídia no dispositivo.

  • Define o sinalizador DO_VERIFY_VOLUME na extensão do dispositivo, para que o sistema desmonte novamente o sistema de arquivos do dispositivo.

  • Força uma atualização dos recursos multimídia do dispositivo.