Freigeben über


Benachrichtigen des Dateisystems über mögliche Medienänderungen

Ein Wechselmediengerätetreiber muss sicherstellen, dass die Medien nicht für das Gerät geändert werden, das durch das DeviceObject dargestellt wird (Eingabe für jede Treiberroutine, die ein IRP gesendet wird), wenn der Treiber ein IRP verarbeitet, das eine Übertragung zu/von den Medien anfordert, oder einen Geräte-E/A-Steuerungsvorgang, der sich auf die Medien auswirkt. Der bestmögliche Zeitpunkt für die Überprüfung auf geänderte Medien ist unmittelbar nach dem Übergang von einem Zustand ohne Medien in einen Medien-gegenwartszustand, wenn das physische Gerät den Treiber immer über diese Zustandsänderungen benachrichtigt.

Wenn sein physisches Gerät angibt, dass sich der Zustand der Medien möglicherweise geändert hat, bevor der Treiber einen E/A-Vorgang beginnt oder während eines Vorgangs, muss der Treiber die folgenden Schritte ausführen:

  1. Stellen Sie sicher, dass das Volume eingebunden ist, indem Sie das flag VPB_MOUNTED im VPB überprüfen. (Wenn das Volume nicht eingebunden ist, darf der Treiber das DO_VERIFY_VOLUME Bit nicht festlegen. Der Treiber sollte IoStatus.Status auf STATUS_IO_DEVICE_ERROR festlegen, IoStatus.Information auf Null festlegen und IoCompleteRequest mit dem IRP aufrufen.)

  2. Legen Sie die Flags im DeviceObject by ORing Flags mit DO_VERIFY_VOLUME fest.

  3. Legen Sie den IoStatus-Block im IRP auf Folgendes fest:

    • Status auf STATUS_VERIFY_REQUIRED festgelegt
    • Informationen , die auf 0 (null) festgelegt sind
  4. Bevor ein IRP mit einem IoStatus-Block abgeschlossen wird, in dem das Feld Status nicht auf STATUS_SUCCESS festgelegt ist, muss der Treiber IoIsErrorUserInduced aufrufen, wodurch für einen der folgenden Statuswerte ein boolescher TRUE-Wert zurückgegeben wird:

    • 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

    Wenn IoIsErrorUserInducedTRUE zurückgibt, muss der Treiber IoSetHardErrorOrVerifyDevice aufrufen, damit die FSD ein Dialogfeld für den Benutzer öffnen kann, der dann auswählen kann, ob die richtigen Medien bereitgestellt, die ursprüngliche Anforderung wiederholt oder der angeforderte Vorgang abgebrochen werden soll.