Freigeben über


IOCTL_STORAGE_MCN_CONTROL IOCTL (ntddstor.h)

Aktiviert oder deaktiviert vorübergehend die Übermittlung der benutzerdefinierten PnP-Ereignisse GUID_IO_MEDIA_ARRIVAL und GUID_IO_MEDIA_REMOVAL auf einem Wechselmediengerät. Dadurch wird wiederum die Medienänderungserkennung (automatische Wiedergabe) für das Gerät aktiviert oder deaktiviert, wenn der Anrufer das Gerät mit FILE_READ_ATTRIBUTES Zugriff geöffnet hat und ob die automatische Wiedergabe des Geräts in der Registrierung aktiviert ist. Der Aufrufer darf das Gerät nicht für Lese- oder Schreibzugriff öffnen, oder der IOCTL-Vorgang schlägt fehl. Diese IOCTL hat keine Auswirkungen auf die Einstellung für die automatische Wiedergabe in der Registrierung.

Ein Treiber für ein solches Wechselmediengerät muss folgende Aktionen ausführen:

  1. Behalten Sie die Anzahl der deaktiven Anforderungen pro physischem Gerät in der Geräteobjekterweiterung bei.
  2. Wenn mit diesem IOCTL aufgerufen wird, wird die Anzahl erhöht, wenn die Kennzeichnung zum Deaktivieren der Medienänderungserkennung festgelegt ist; wenn das Kennzeichen gelöscht ist, erhöhen Sie die Anzahl.
  3. Legen Sie das Medienänderungsereignis für das Gerät fest, wenn der Medienstatus nur geändert wird, wenn die Anzahl der deaktiven Anforderungen null ist.
Wenn das IRP_MJ_DEVICE_CONTROL IRP, das diese IOCTL enthält, an den SCSI-Klassentreiber übergeben wird, muss das FileObject -element des aktuellen IO_STACK_LOCATION auf ein gültiges Dateiobjekt verweisen. Der SCSI-Klassentreiber erfordert ein Dateiobjekt für Fälle, in denen eine Benutzermodusanwendung, die die automatische Wiedergabe deaktiviert oder aktiviert, unerwartet beendet wird. In solchen Fällen verwendet der SCSI-Klassentreiber das Dateiobjekt, um die Erkennung von Medienänderungen erneut zu aktivieren. Da das Dateiobjekt für die ordnungsgemäße Bereinigung erforderlich ist, führt der SCSI-Klassentreiber dazu, dass das IRP mit einer Fehlermeldung von STATUS_INVALID_PARAMETER fehlschlägt, wenn das FileObject Element von IO_STACK_LOCATION nicht auf ein gültiges Dateiobjekt verweist. Wenn eine Benutzermodusanwendung das Gerät öffnet, initialisiert der E/A-Manager dieses Element, aber Kernelmodustreiber-Autoren sollten nicht davon ausgehen, dass FileObject- ordnungsgemäß initialisiert wird, wenn das IRP von einer Benutzermodusanwendung generiert wird. Wenn beispielsweise eine Anwendung im Benutzermodus das Gerät versehentlich zum Lesen oder Schreiben öffnet, bevor die IOCTL gesendet wird, wird das Gerätesteuerungs-IRP über das Dateisystem weitergeleitet, hindert den SCSI-Klassentreiber und den Gerätetreiber daran, direkt auf das Dateiobjekt des Geräts zuzugreifen.

Hauptcode

IRP_MJ_DEVICE_CONTROL

Eingabepuffer

Der Puffer bei Irp->AssociatedIrp.SystemBuffer enthält einen booleschen Wert, wobei TRUE angibt, dass der Treiber die Medienänderungserkennung deaktivieren soll.

Eingabepufferlänge

Die Länge eines Werts vom Typ Boolean.

Ausgabepuffer

Nichts.

Länge des Ausgabepuffers

Nichts.

Statusblock

Das Feld Information wird auf Null festgelegt. Das feld Status wird auf STATUS_SUCCESS oder möglicherweise auf STATUS_BUFFER_TOO_SMALL, STATUS_INVALID_PARAMETER oder STATUS_INVALID_DEVICE_STATE festgelegt.

Anforderungen

Anforderung Wert
Header- ntddstor.h (include Ntddstor.h)

Siehe auch

IO_STACK_LOCATION