Share via


Notifica al file system di possibili modifiche al supporto

Un driver di dispositivo multimediale rimovibile deve garantire che il supporto non venga modificato per il dispositivo rappresentato da DeviceObject (input per ogni routine driver inviata da un IRP) ogni volta che il driver elabora un IRP che richiede un trasferimento da/verso il supporto o un'operazione di controllo di I/O del dispositivo che influisce sul supporto. Il miglior tempo possibile per verificare la presenza di supporti modificati è subito dopo la transizione da uno stato no-media-present a uno stato media-present se il dispositivo fisico invia sempre una notifica al driver di queste modifiche di stato.

Se il dispositivo fisico indica che lo stato del supporto potrebbe essere stato modificato prima che il driver inizi un'operazione di I/O o durante un'operazione, il driver deve eseguire le operazioni seguenti:

  1. Assicurarsi che il volume sia montato controllando il flag VPB_MOUNTED nel VPB. Se il volume non è montato, il driver non deve impostare il bit DO_VERIFY_VOLUME. Il driver deve impostare IoStatus.Status su STATUS_IO_DEVICE_ERROR, impostare IoStatus.Information su zero e chiamare IoCompleteRequest con L'IRP.

  2. Impostare i flag in DeviceObject by ORing Flags con DO_VERIFY_VOLUME.

  3. Impostare il blocco IoStatus in IRP su quanto segue:

    • Stato impostato su STATUS_VERIFY_REQUIRED
    • Informazioni impostate su zero
  4. Prima di completare qualsiasi IRP con un blocco IoStatus in cui il campo Stato non è impostato su STATUS_SUCCESS, il driver deve chiamare IoIsErrorUserInduced, che restituisce un valore Boolean TRUE per uno dei valori Status seguenti:

    • 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

    Se IoIsErrorUserInduced restituisce TRUE, il driver deve chiamare IoSetHardErrorOrVerifyDevice in modo che fsd possa aprire una finestra di dialogo all'utente, che può quindi scegliere di fornire il supporto corretto, ritentare la richiesta originale o annullare l'operazione richiesta.