Memberi tahu Sistem File tentang Kemungkinan Perubahan Media

Driver perangkat media yang dapat dilepas harus memastikan bahwa media tidak diubah untuk perangkat yang diwakili oleh DeviceObject (input ke setiap rutinitas driver yang dikirim IRP) setiap kali driver memproses IRP yang meminta transfer ke/dari media atau operasi kontrol I/O perangkat yang memengaruhi media. Waktu terbaik untuk memeriksa media yang diubah adalah tepat setelah transisi dari status tidak ada media saat ini ke status media saat ini jika perangkat fisik selalu memberi tahu driver tentang perubahan status ini.

Jika perangkat fisiknya menunjukkan bahwa status media mungkin telah berubah sebelum driver memulai operasi I/O atau selama operasi, driver harus melakukan hal berikut:

  1. Pastikan volume dipasang dengan memeriksa bendera VPB_MOUNTED di VPB. (Jika volume tidak dipasang, driver tidak boleh mengatur bit DO_VERIFY_VOLUME. Driver harus mengatur IoStatus.Status ke STATUS_IO_DEVICE_ERROR, mengatur IoStatus.Information ke nol, dan memanggil IoCompleteRequest dengan IRP.)

  2. Atur Bendera di DeviceObject oleh Bendera ORing dengan DO_VERIFY_VOLUME.

  3. Atur blok IoStatus di IRP ke yang berikut ini:

    • Status diatur ke STATUS_VERIFY_REQUIRED
    • Informasi diatur ke nol
  4. Sebelum menyelesaikan IRP apa pun dengan blok IoStatus di mana bidang Status tidak diatur ke STATUS_SUCCESS, driver harus memanggil IoIsErrorUserInduced, yang mengembalikan Boolean TRUE untuk salah satu nilai Status berikut:

    • 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

    Jika IoIsErrorUserInduced mengembalikan TRUE, driver harus memanggil IoSetHardErrorOrVerifyDevice sehingga FSD dapat membuka kotak dialog kepada pengguna, yang kemudian dapat memilih untuk menyediakan media yang benar, mencoba kembali permintaan asli, atau membatalkan operasi yang diminta.