Freigeben über


IOCTL_CDROM_EXCLUSIVE_ACCESS IOCTL (ntddcdrm.h)

Die IOCTL_CDROM_EXCLUSIVE_ACCESS-Anforderung weist den CD-ROM-Klassentreiber an:

  • Melden Sie den Zugriffsstatus eines CD-ROM-Geräts.
  • Sperren Sie ein CD-ROM-Gerät für den exklusiven Zugriff.
  • Entsperren Sie ein CD-ROM-Gerät für den exklusiven Zugriff.
Ein gültiges FileObject-Handle muss vorhanden sein, damit diese IOCTL erfolgreich ist. Das FileObject-Handle schützt das System vor einer unerwarteten Anwendungsbeendigung oder dem versehentlichen Erwerb einer exklusiven Zugriffssperre, ohne dass die exklusive Zugriffssperre anschließend freigegeben wird. Ein gültiges FileObject-Handle ist erforderlich, da der CD-ROM-Klassentreiber beim Schließen einer Anwendung CLEANUP- und CLOSE-E/A-Anforderungspakete (IRPs) empfängt, mit denen er automatisch eine exklusive Zugriffssperre freigeben kann, die von diesem Handle abgerufen wurde. Diese einfache Methode schützt vor den meisten versehentlichen Freigaben des exklusiven Zugriffs. Alle Methoden, die verwendet werden, um diese Funktionalität zu vermeiden, können die Sicherheit und Effektivität der exklusiven Zugriffssperrungsmethode beeinträchtigen.

Hauptcode

IRP_MJ_DEVICE_CONTROL

Eingabepuffer

Abhängig von dem Vorgang, den der Aufrufer anfordert, muss der Aufrufer eine der folgenden Strukturen als Eingabe unter Irp-AssociatedIrp.SystemBuffer> bereitstellen:

Länge des Eingabepuffers

Das Parameters.DeviceIoControl.InputBufferLength-Element in der IO_STACK_LOCATION-Struktur gibt die Größe des vom Benutzer zugewiesenen Eingabepuffers in Bytes an.

Ausgabepuffer

Wenn der Aufrufer den exklusiven Zugriffsstatus des CD-ROM-Geräts anfordert (RequestType = ExclusiveAccessQueryState), gibt der CD-ROM-Klassentreiber eine CDROM_EXCLUSIVE_LOCK_STATE-Typstruktur im Puffer bei Irp-AssociatedIrp.SystemBuffer zurück, dessen LockState-Member>den Zugriffsstatus des Geräts angibt.

Länge des Ausgabepuffers

Der Parameter.DeviceIoControl.OutputBufferLength-Member am E/A-Stapelspeicherort (IO_STACK_LOCATION) gibt die Größe des Ausgabepuffers in Bytes an.

Statusblock

Das Feld Information ist auf die Anzahl der zurückgegebenen Bytes festgelegt. Das Feld Status ist auf STATUS_SUCCESS festgelegt, wenn die Anforderung erfolgreich ist.

Wenn die Anforderung fehlschlägt, wird das Feld Status möglicherweise auf eine der folgenden Fehlermeldungen festgelegt:

STATUS_ACCESS_DENIED (Windows-Fehlercode: ERROR_ACCESS_DENIED)

Das Gerät ist bereits für den exklusiven Zugriff gesperrt.

STATUS_BUFFER_TOO_SMALL (Windows-Fehlercode: ERROR_INSUFFICIENT_BUFFER)

Der Ausgabepuffer war für eine ExclusiveAccessQueryState-Anforderung zu klein.

STATUS_INFO_LENGTH_MISMATCH (Windows-Fehlercode: ERROR_BAD_LENGTH)

Der Eingabepuffer war zu klein.

STATUS_INVALID_DEVICE_REQUEST (Windows-Fehlercode: ERROR_INVALID_FUNCTION)

Der CD-ROM-Klassentreiber gibt diesen status Code zurück, wenn einer der folgenden beiden Fehler auftritt:

  • Der Aufrufer hat die Anforderung auf einer anderen IRQL-Ebene als PASSIVE_LEVEL ausgeführt.
  • Der Aufrufer hat eine Anforderung mit RequestType = ExclusiveAccessUnlockDevice gesendet, um ein Gerät zu entsperren, das sich nicht im exklusiven Modus befindet.

STATUS_INVALID_DEVICE_STATE (Windows-Fehlercode: ERROR_BAD_COMMAND)

Der Aufrufer versuchte, ein Gerät zu sperren, während der Dateisystemtreiber auf diesem Gerät eingebunden wurde, ohne anzugeben, dass der Klassentreiber die Überprüfung auf einen eingebundenen Dateisystemtreiber anhalten soll. Um die Überprüfung für einen eingebundenen Dateisystemtreiber anzusetzen, muss der Aufrufer das Flags-Element von CDROM_EXCLUSIVE_ACCESS auf 1 festlegen.

STATUS_INVALID_HANDLE (Windows-Fehlercode: ERROR_INVALID_HANDLE)

Der CD-ROM-Klassentreiber gibt diesen status Code zurück, wenn einer der folgenden beiden Fehler auftritt:

  • Das Dateiobjekt, das zum Nachverfolgen der Anforderung erforderlich ist, war nicht verfügbar. Der CD-ROM-Klassentreiber hat keine Anforderung zum Erstellen eines Dateiobjekts von diesem Aufrufer empfangen.
  • Der Aufrufer hat eine Anforderung mit RequestType = ExclusiveAccessUnlockDevice gesendet, um ein Gerät zu entsperren, obwohl der Aufrufer keinen exklusiven Zugriff auf das Gerät hat.

STATUS_INVALID_PARAMETER (Windows-Fehlercode: ERROR_INVALID_PARAMETER)

Der CD-ROM-Klassentreiber gibt diesen status Code zurück, wenn einer der folgenden beiden Fehler auftritt:

  • Der angegebene RequestType ist kein gültiges Element von EXCLUSIVE_ACCESS_REQUEST_TYPE.
  • Die Namenszeichenfolge des Aufrufers im CallerName-Member von CDROM_EXCLUSIVE_LOCK verstößt gegen die Namenskonvention. CallerName muss eine NULL-endende Zeichenfolge sein, die die folgenden Zeichen enthält: Alphanumerik (A - Z, a - z, 0 - 9), Leerzeichen, Punkte, Kommas, Doppelpunkte (:), Semikolons (;), Bindestriche (-) und Unterstriche (_). Die Länge der Zeichenfolge muss kleiner als CDROM_EXCLUSIVE_CALLER_LENGTH Bytes sein, einschließlich null am Ende der Zeichenfolge.

Anforderungen

Anforderung Wert
Header ntddcdrm.h (einschließen von Ntddcdrm.h)

Weitere Informationen

CDROM_EXCLUSIVE_ACCESS

CDROM_EXCLUSIVE_LOCK

CDROM_EXCLUSIVE_LOCK_STATE

EXCLUSIVE_ACCESS_REQUEST_TYPE

IO_STACK_LOCATION