Partilhar via


Notificar o sistema de arquivos sobre possíveis alterações de mídia

Um driver de dispositivo de mídia removível deve garantir que a mídia não seja alterada para o dispositivo representado pelo DeviceObject (entrada para cada rotina de driver a que é enviado um IRP) sempre que o driver processa um IRP que solicita uma transferência de/para a mídia ou uma operação de controlo de entrada/saída do dispositivo que afeta a mídia. O melhor momento possível para verificar se há mídia alterada é logo após a transição de um estado sem mídia presente para um estado presente na mídia, se o dispositivo físico sempre notificar o driver sobre essas alterações de estado.

Se o seu dispositivo físico indicar que o estado do suporte pode ter mudado antes de o controlador iniciar uma operação de E/S ou durante uma operação, o controlador deve fazer o seguinte:

  1. Certifique-se de que o volume está montado verificando o sinalizador VPB_MOUNTED no VPB. (Se o volume não estiver montado, o driver não deve definir o bit DO_VERIFY_VOLUME. O driver deve definir IoStatus.Status como STATUS_IO_DEVICE_ERROR, definir IoStatus.Information como zero e chamar IoCompleteRequest com o IRP.)

  2. Defina os Flags no DeviceObject ao combinar os Flags com DO_VERIFY_VOLUME.

  3. Defina o bloco IoStatus no IRP para o seguinte:

    • Status definido como STATUS_VERIFY_REQUIRED
    • Informação definida como zero
  4. Antes de concluir qualquer IRP com um bloco IoStatus no qual o campo Status não está definido como STATUS_SUCCESS, o driver deve chamar IoIsErrorUserInduced, que retorna um TRUE booleano para qualquer um dos seguintes valores de Status :

    • STATUS_VERIFY_REQUIRED
    • STATUS_NO_MEDIA_IN_DEVICE
    • STATUS_WRONG_VOLUME
    • STATUS_UNRECOGNIZED_MEDIA
    • STATUS_MEDIA_PROTEGIDO_CONTRA_GRAVAÇÃO
    • STATUS_IO_TIMEOUT
    • STATUS_DISPOSITIVO_NÃO_PRONTO

    Se IoIsErrorUserInduced retornar TRUE, o driver deve chamar IoSetHardErrorOrVerifyDevice para que o FSD possa abrir uma caixa de diálogo para o usuário, que pode optar por fornecer a mídia correta, repetir a solicitação original ou cancelar a operação solicitada.