Freigeben über


IOCTL_STORAGE_EJECTION_CONTROL IOCTL (ntddstor.h)

Sperrt das Gerät, um das Entfernen der Medien zu verhindern. Wenn der Treiber verhindern kann, dass die Medien entfernt werden, während das Laufwerk verwendet wird, deaktiviert oder aktiviert der Treiber den Mechanismus, der Medien ausgibt, und sperrt dadurch das Laufwerk. Ein Aufrufer muss das Gerät mit FILE_READ_ATTRIBUTES öffnen, um diese Anforderung zu senden.

Im Gegensatz zu IOCTL_STORAGE_MEDIA_REMOVAL verfolgt der Fahrer IOCTL_STORAGE_EJECTION_CONTROL Anforderungen des Anrufers und ignoriert Entsperrungsanforderungen, für die er keine Sperranforderung vom gleichen Anrufer erhalten hat, wodurch andere Anrufer daran gehindert werden, das Laufwerk zu entsperren.

Ein Treiber für ein Wechselmediengerät kann diese IOCTL unterstützen, muss folgendes tun:

  1. Behalten Sie in der Geräteobjekterweiterung eine Sperranzahl bei, die vom Aufrufer markiert wird.
  2. Behalten Sie die Sperranzahl pro physischem Gerät bei.
  3. Wenn bei Aufruf mit dieser IOCTL das Flag zum Verhindern des Entfernens der Medien festgelegt ist, erhöhen Sie die Anzahl; Wenn das Flag eindeutig ist und der Treiber zuvor eine Sperranforderung vom gleichen Aufrufer empfangen hat, verringern Sie die Anzahl.
  4. Verhindern Sie das Entfernen der Medien, es sei denn, alle Sperranzahlen sind null.
Unter normalen Umständen entsperrt der Anrufer, der das Gerät mit IOCTL_STORAGE_EJECTION_CONTROL gesperrt hat, das Gerät, indem er IOCTL_STORAGE_EJECTION_CONTROL erneut sendet, wobei Irp->AssociatedIrp.SystemBuffer auf den booleschen Wert FALSE festgelegt ist. Manchmal kann der Aufrufer das Gerät jedoch nicht ordnungsgemäß entsperren.

Um sicherzustellen, dass Sperren für die Medienentfernung ordnungsgemäß aufgehoben werden, verfolgt der Klassentreiber anrufer, die die Medien mit IOCTL_STORAGE_EJECTION_CONTROL sperren. Wenn der Aufrufer beendet wird, ohne das Gerät zu entsperren, entsperrt der Klassentreiber das Gerät.

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 auf dem Laufwerk sperren soll.

Länge des Eingabepuffers

Die Länge eines booleschen Werts.

Ausgabepuffer

Keine.

Länge des Ausgabepuffers

Keine.

Statusblock

Das Feld Information ist auf 0 (null) festgelegt. Das Feld Status ist auf STATUS_SUCCESS oder möglicherweise auf STATUS_INVALID_DEVICE_REQUEST, STATUS_NO_MEDIA_IN_DEVICE oder STATUS_DEVICE_NOT_CONNECTED festgelegt.

Anforderungen

Anforderung Wert
Header ntddstor.h (einschließen von Ntddstor.h)

Weitere Informationen

IOCTL_STORAGE_EJECT_MEDIA