Freigeben über


IOCTL_STORAGE_PERSISTENT_RESERVE_OUT IOCTL (ntddstor.h)

Der generische Speicherklassentreiber (classpnp.sys) macht eine I/O-Steuerelementschnittstelle (IOCTL) für das Ausstellen von Befehlen für beständigen Reserveausgang verfügbar. Das Verhalten des Speichergeräts, wenn ein Befehl "Persistent Reserve Out" empfangen wird, wird in der Spezifikation SCSI Primary Commands - 2 (SPC-2) beschrieben. Die IOCTL-Schnittstelle erfordert, dass der Aufrufer Lese-/Schreibzugriff auf das physische Gerät für Befehle "Persistent Reserve Out" hat. Benutzermodusanwendungen, Dienste und Kernelmodustreiber können diese IOCTL verwenden, um dauerhafte Reservierungen zu steuern. Wenn von einem Treiber aufgerufen wird, muss diese IOCTL von einem Thread aufgerufen werden, der bei IRQL-< DISPATCH_LEVEL ausgeführt wird. Diese IOCTL ist mit FILE_READ_ACCESS und FILE_WRITE_ACCESS definiert, wobei ein Gerätehandle sowohl Lese- als auch Schreibberechtigungen zum Ausgeben des Befehls "Persistent Reserve Out" erfordert.

Hauptcode

IRP_MJ_DEVICE_CONTROL

Eingabepuffer

Der Puffer bei Irp->AssociatedIrp.SystemBuffer enthält eine PERSISTENT_RESERVE_COMMAND Struktur. Sie müssen den Puffer aus einem nicht ausgelagerten Pool zuordnen und ihn für das Zielgerät und den Adapter ordnungsgemäß ausrichten.

PR_OUT. ServiceAction kann eine der folgenden Sein:

  • RESERVATION_ACTION_REGISTER
  • RESERVATION_ACTION_RESERVE
  • RESERVATION_ACTION_RELEASE
  • RESERVATION_ACTION_CLEAR
  • RESERVATION_ACTION_PREEMPT
  • RESERVATION_ACTION_PREEMPT_ABORT
  • RESERVATION_ACTION_REGISTER_IGNORE_EXISTING

PR_OUT. Der Bereich kann eine der folgenden Sein:

  • RESERVATION_SCOPE_LU
  • RESERVATION_SCOPE_ELEMENT

PR_OUT. Typ kann eine der folgenden Sein:

  • RESERVATION_TYPE_WRITE_EXCLUSIVE
  • RESERVATION_TYPE_EXCLUSIVE
  • RESERVATION_TYPE_WRITE_EXCLUSIVE_REGISTRANTS
  • RESERVATION_TYPE_EXCLUSIVE_REGISTRANTS

PR_OUT. ParameterList wird verwendet, um die PRO_PARAMETER_LIST Struktur zu speichern. Diese Struktur ist erforderlich und muss mit dem Rest der PERSISTENT_RESERVE_COMMAND Struktur zusammenhängend sein.

Eingabepufferlänge

Die Länge einer PERSISTENT_RESERVE_COMMAND Struktur.

Ausgabepuffer

Nichts.

Länge des Ausgabepuffers

Nichts.

Statusblock

Das Feld Information wird auf Null festgelegt.

Das feld Status wird auf einen der folgenden Werte festgelegt.

Wert Bedeutung
STATUS_DEVICE_BUSY (ERROR_BUSY) Der Befehl ist aufgrund eines Reservierungskonflikts fehlgeschlagen (weitere Informationen finden Sie in der Spezifikation SCSI Primary Commands - 2 (SPC-2).
STATUS_INFO_LENGTH_MISMATCH Die Länge des Eingabepuffers für die IOCTL ist kleiner als sizeof(PERSISTENT_RESERVE_COMMAND) oder die größe, die in der PERSISTENT_RESERVE_COMMAND Datenstruktur angegeben ist, ist kleiner als sizeof(PERSISTENT_RESERVE_COMMAND).
STATUS_INVALID_DEVICE_REQUEST (ERROR_INVALID_FUNCTION) Der E/A-Steuerelementcode (IOCTL_STORAGE_PERSISTENT_RESERVE_OUT) wird von den Speichertreibern nicht unterstützt.
STATUS_INVALID_PARAMETER (ERROR_INVALID_PARAMETER) Die Eingabepufferstruktur ist falsch angepasst oder aufgefüllt.
STATUS_INVALID_USER_BUFFER (ERROR_INVALID_USER_BUFFER) Der Eingabepuffer wird für das Gerät oder den Adapter nicht ordnungsgemäß ausgerichtet. Dieser Status kann nur zurückgegeben werden, wenn ein Treiber eine IOCTL an den Speicherstapel sendet. Dieser Status wird nicht zurückgegeben, wenn eine Benutzermodusanwendung die IOCTL über die DeviceIoControl-API sendet, während der E/A-Manager die Puffer automatisch richtet.
STATUS_IO_DEVICE_ERROR (ERROR_IO_DEVICE) Das Gerät unterstützt nicht den Befehl "Persistent Reserve Out".
STATUS_SUCCESS Der Vorgang war erfolgreich.

Anforderungen

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