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 Erkennung von Medienänderungen (AutoPlay) für das Gerät aktiviert oder deaktiviert, wenn der Aufrufer das Gerät mit FILE_READ_ATTRIBUTES Zugriff geöffnet hat und das Gerät die automatische Wiedergabe in der Registrierung aktiviert hat. Der Aufrufer darf das Gerät nicht für den Lese- oder Schreibzugriff öffnen, andernfalls schlägt der IOCTL-Vorgang fehl. Diese IOCTL hat keine Auswirkungen auf die Einstellung AutoPlay in der Registrierung.

Ein Treiber für ein solches Wechselmedium muss folgendes tun:

  1. Behalten Sie die Anzahl der Deaktivierungsanforderungen pro physischem Gerät in der Geräteobjekterweiterung bei.
  2. Wenn mit dieser IOCTL aufgerufen wird, erhöhen Sie die Anzahl, wenn das Flag zum Deaktivieren der Medienänderungserkennung festgelegt ist. Wenn das Flag klar ist, verringern Sie die Anzahl.
  3. Legen Sie das Medienänderungsereignis für das Gerät fest, wenn der Medienzustand nur dann geändert wird, wenn die Anzahl der Deaktivierungsanforderungen 0 ist.
Wenn die IRP_MJ_DEVICE_CONTROL IRP, die 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 ermöglichen. Da das Dateiobjekt für eine ordnungsgemäße sauber erforderlich ist, führt der SCSI-Klassentreiber dazu, dass der IRP mit der Fehlermeldung 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. Kernelmodustreiber-Writer sollten jedoch nicht davon ausgehen, dass FileObject ordnungsgemäß initialisiert wird, wenn die IRP von einer Benutzermodusanwendung generiert wird. Wenn für instance eine Anwendung im Benutzermodus das Gerät vor dem Senden des IOCTL versehentlich für Lese- oder Schreibzugriff öffnet, wird die Gerätesteuerungs-IRP über das Dateisystem weitergeleitet, sodass der SCSI-Klassentreiber und der Gerätetreiber nicht direkt auf das Dateiobjekt des Geräts zugreifen können.

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 booleschen Werts.

Ausgabepuffer

Keine.

Länge des Ausgabepuffers

Keine.

Statusblock

Das Feld Information ist auf 0 festgelegt. Das Feld Status ist 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)

Weitere Informationen

IO_STACK_LOCATION