Freigeben über


IOCTL_STORAGE_PERSISTENT_RESERVE_IN IOCTL (ntddstor.h)

Der generische Speicherklassentreiber (classpnp.sys) macht eine I/O-Steuerelementschnittstelle (IOCTL) für das Ausstellen von Befehlen für persistente Reserve in verfügbar. Das Verhalten des Speichergeräts, wenn ein Befehl "Persistent Reserve In" empfangen wird, wird in der Spezifikation SCSI Primary Commands - 2 (SPC-2) beschrieben. Die IOCTL-Schnittstelle erfordert, dass der Aufrufer Lesezugriff auf das physische Gerät für Befehle für persistente Reserve-In-Befehle 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 definiert, sodass ein Gerätehandle über Leseberechtigungen verfügt, um den Befehl "Persistent Reserve In" ausstellen zu können.

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_IN. ServiceAction kann eine der folgenden Sein:

  • RESERVATION_ACTION_READ_KEYS
  • RESERVATION_ACTION_READ_RESERVATIONS

PR_IN. Die Zuordnungslänge ist die Größe (in Byte) des Puffers, der der zurückgegebenen Parameterliste zugeordnet ist.

Eingabepufferlänge

Die Länge des Eingabepuffers in Byte.

Ausgabepuffer

Für PR_IN. ServiceAction = RESERVATION_ACTION_READ_KEYS enthält der Ausgabepuffer eine PRI_REGISTRATION_LIST Struktur und muss mindestens sizeof(PRI_REGISTRATION_LIST) sein.

Für PR_IN. ServiceAction = RESERVATION_ACTION_READ_RESERVATIONS, der Ausgabepuffer enthält eine PRI_RESERVATION_LIST Struktur und muss mindestens sizeof(PRI_RESERVATION_LIST) sein.

Wenn der zugeordnete Puffer zu klein ist, um alle Daten der beständigen Reserve zurückzugeben, wird der Erfolg zurückgegeben, und die erforderliche Größe wird in der Parameterliste AdditionalLength Feld zurückgegeben.

Länge des Ausgabepuffers

Die Länge des Ausgabepuffers in Byte.

Statusblock

Das Feld Information wird auf die Größe des Ausgabepuffers festgelegt. Für ServiceAction = RESERVATION_ACTION_READ_KEYS ist der Ausgabepuffer eine PRI_REGISTRATION_LIST Struktur. Für ServiceAction = RESERVATION_ACTION_READ_RESERVATIONS ist der Ausgabepuffer eine PRI_REGISTRATION_LIST Struktur.

Das Feld Status wird auf eine der folgenden Werte festgelegt:

Wert Bedeutung
STATUS_BUFFER_OVERFLOW (ERROR_MORE_DATA) Der Ausgabepuffer ist zu klein, um die persistente Reserve in Daten zu speichern. Das AdditionalLength Feld des Ausgabepuffers enthält die Größe der zurückgegebenen Daten.
STATUS_DEVICE_BUSY (ERROR_BUSY) Der Befehl ist aufgrund eines Reservierungskonflikts fehlgeschlagen (weitere Informationen finden Sie in den primären SCSI-Befehlen - 2 (SPC-2)** Spezifikation).
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_IN) 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 Eingabe- oder Ausgabepuffer wird für das Gerät oder den Adapter nicht ordnungsgemäß ausgerichtet. Dieser Status konnte 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, da der E/A-Manager die Puffer automatisch richtet.
STATUS_IO_DEVICE_ERROR (ERROR_IO_DEVICE) Das Gerät unterstützt den Befehl "Persistent Reserve In" nicht.
STATUS_SUCCESS Der Vorgang war erfolgreich.

Anforderungen

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