Notificación al sistema de archivos de posibles cambios en los medios

Un controlador de dispositivo multimedia extraíble debe asegurarse de que el medio no se cambie para el dispositivo representado por DeviceObject (entrada a cada rutina de controlador que se envía un IRP) siempre que el controlador procese un IRP que solicite una transferencia hacia o desde el medio o una operación de control de E/S de dispositivo que afecte al medio. El mejor momento posible para comprobar los medios modificados es justo después de la transición de un estado no-media-present a un estado multimedia-present si el dispositivo físico siempre notifica al controlador sobre estos cambios de estado.

Si su dispositivo físico indica que el estado del medio podría haber cambiado antes de que el controlador inicie una operación de E/S o durante una operación, el controlador debe hacer lo siguiente:

  1. Asegúrese de que el volumen está montado comprobando la marca VPB_MOUNTED en la VPB. (Si el volumen no está montado, el controlador no debe establecer el bit de DO_VERIFY_VOLUME. El controlador debe establecer IoStatus.Status en STATUS_IO_DEVICE_ERROR, establecer IoStatus.Information en cero y llamar a IoCompleteRequest con IRP).

  2. Establezca las marcas en DeviceObject by ORing Flags con DO_VERIFY_VOLUME.

  3. Establezca el bloque IoStatus en irP en lo siguiente:

    • Estado establecido en STATUS_VERIFY_REQUIRED
    • Información establecida en cero
  4. Antes de completar cualquier IRP con un bloque IoStatus en el que el campo Estado no está establecido en STATUS_SUCCESS, el controlador debe llamar a IoIsErrorUserInduced, que devuelve un valor Boolean TRUE para cualquiera de los siguientes valores de estado :

    • STATUS_VERIFY_REQUIRED
    • STATUS_NO_MEDIA_IN_DEVICE
    • STATUS_WRONG_VOLUME
    • STATUS_UNRECOGNIZED_MEDIA
    • STATUS_MEDIA_WRITE_PROTECTED
    • STATUS_IO_TIMEOUT
    • STATUS_DEVICE_NOT_READY

    Si IoIsErrorUserInduced devuelve TRUE, el controlador debe llamar a IoSetHardErrorOrVerifyDevice para que el FSD pueda abrir un cuadro de diálogo al usuario, que puede elegir proporcionar los medios correctos, reintentar la solicitud original o cancelar la operación solicitada.