IOCTL_STORAGE_MCN_CONTROL IOCTL (ntddstor.h)

Habilita ou desabilita temporariamente a entrega dos eventos PnP personalizados GUID_IO_MEDIA_ARRIVAL e GUID_IO_MEDIA_REMOVAL em um dispositivo de mídia removível. Isso, por sua vez, habilita ou desabilita a detecção de alterações de mídia (Reprodução Automática) para o dispositivo se o chamador tiver aberto o dispositivo com acesso FILE_READ_ATTRIBUTES e se o dispositivo tiver a Reprodução Automática habilitada no registro. O chamador não deve abrir o dispositivo para acesso de leitura ou gravação ou a operação IOCTL falhará. Esse IOCTL não tem efeito sobre a configuração de Reprodução Automática no Registro.

Um driver para um dispositivo de mídia removível deve fazer o seguinte:

  1. Mantenha uma contagem de solicitações desabilitar, por dispositivo físico, na extensão do objeto do dispositivo.
  2. Quando chamado com esse IOCTL, se o sinalizador para desabilitar a detecção de alteração de mídia estiver definido, incremente a contagem; se o sinalizador estiver claro, decremente a contagem.
  3. Defina o evento de alteração de mídia para o dispositivo quando o estado de mídia for alterado somente se a contagem de solicitações de desabilitar for zero.
Quando o IRP_MJ_DEVICE_CONTROL IRP que contém esse IOCTL é passado para o driver de classe SCSI, o membro FileObject do IO_STACK_LOCATION atual deve apontar para um objeto de arquivo válido. O driver de classe SCSI requer um objeto de arquivo para casos em que um aplicativo de modo de usuário que está desabilitando ou habilitando a Reprodução Automática termina inesperadamente. Nesses casos, o driver de classe SCSI usa o objeto de arquivo para reabilitar a detecção de alterações de mídia. Como o objeto de arquivo é necessário para limpo-up adequado, o driver de classe SCSI fará com que o IRP falhe com uma mensagem de erro de STATUS_INVALID_PARAMETER se o membro FileObject do IO_STACK_LOCATION não apontar para um objeto de arquivo válido. Se um aplicativo de modo de usuário abrir o dispositivo, o gerenciador de E/S inicializará esse membro, mas os gravadores de driver no modo kernel não devem assumir que FileObject será inicializado corretamente quando o IRP for gerado por um aplicativo no modo de usuário. Se, por exemplo, um aplicativo de modo de usuário abrir erroneamente o dispositivo para acesso de leitura ou gravação antes de enviar o IOCTL, o controle de dispositivo IRP será roteado por meio do sistema de arquivos, impedindo que o driver de classe SCSI e o driver de dispositivo acessem diretamente o objeto de arquivo do dispositivo.

Código principal

IRP_MJ_DEVICE_CONTROL

Buffer de entrada

O buffer em Irp-AssociatedIrp.SystemBuffer> contém um valor booliano, com TRUE indicando que o driver deve desabilitar a detecção de alteração de mídia.

Comprimento do buffer de entrada

O comprimento de um booliano.

Buffer de saída

Nenhum.

Comprimento do buffer de saída

Nenhum.

Bloco de status

O campo Informações é definido como zero. O campo Status é definido como STATUS_SUCCESS ou possivelmente para STATUS_BUFFER_TOO_SMALL, STATUS_INVALID_PARAMETER ou STATUS_INVALID_DEVICE_STATE.

Requisitos

Requisito Valor
Cabeçalho ntddstor.h (inclua Ntddstor.h)

Confira também

IO_STACK_LOCATION