Freigeben über


IOCTL_STORAGE_PERSISTENT_RESERVE_OUT IOCTL (ntddstor.h)

Der generische Speicherklassentreiber (classpnp.sys) macht eine IOCTL-Schnittstelle (E/A-Steuerelement) für die Ausgabe von Persistent Reserve Out-Befehlen verfügbar. Das Verhalten des Speichergeräts beim Empfang eines Persistent Reserve Out-Befehls 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 Persistent Reserve Out-Befehle hat. Benutzermodusanwendungen, Dienste und Kernelmodustreiber können diese IOCTL verwenden, um persistente Reservierungen zu steuern. Wenn sie von einem Treiber aufgerufen wird, muss diese IOCTL von einem Thread aufgerufen werden, der bei IRQL < DISPATCH_LEVEL ausgeführt wird. Diese IOCTL wird mit FILE_READ_ACCESS und FILE_WRITE_ACCESS definiert, sodass ein Gerätehandle über Lese- und Schreibberechtigungen verfügt, um den Befehl Persistent Reserve Out auszuweisen.

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 auslagerten 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 wie folgt aussehen:

  • RESERVATION_SCOPE_LU
  • RESERVATION_SCOPE_ELEMENT

PR_OUT. Der Typ kann einer 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 aufzunehmen. 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

Keine.

Länge des Ausgabepuffers

Keine.

Statusblock

Das Feld Information ist auf 0 festgelegt.

Das Feld Status ist 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 Eingabepufferlänge für die IOCTL ist kleiner als sizeof(PERSISTENT_RESERVE_COMMAND) oder die Größe, die in der PERSISTENT_RESERVE_COMMAND Datenstruktur angegeben wird, ist kleiner als sizeof(PERSISTENT_RESERVE_COMMAND).
STATUS_INVALID_DEVICE_REQUEST (ERROR_INVALID_FUNCTION) Der E/A-Steuerungscode (IOCTL_STORAGE_PERSISTENT_RESERVE_OUT) wird von den Speichertreibern nicht unterstützt.
STATUS_INVALID_PARAMETER (ERROR_INVALID_PARAMETER) Die Eingabepufferstruktur ist falsch dimensioniert oder aufgefüllt.
STATUS_INVALID_USER_BUFFER (ERROR_INVALID_USER_BUFFER) Der Eingabepuffer ist für das Gerät oder den Adapter nicht ordnungsgemäß ausgerichtet. Diese status kann nur zurückgegeben werden, wenn ein Treiber ein IOCTL an den Speicherstapel sendet. Diese status wird nicht zurückgegeben, wenn eine Benutzermodusanwendung die IOCTL über die DeviceIoControl-API sendet, da der E/A-Manager die Puffer automatisch ausrichtet.
STATUS_IO_DEVICE_ERROR (ERROR_IO_DEVICE) Das Gerät unterstützt den Befehl Persistent Reserve Out nicht.
STATUS_SUCCESS Der Vorgang wurde durchgeführt.

Anforderungen

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