Freigeben über


IOCTL_STORAGE_PERSISTENT_RESERVE_IN IOCTL (ntddstor.h)

Der generische Speicherklassentreiber (classpnp.sys) macht eine IOCTL-Schnittstelle (E/A-Steuerelement) für die Ausgabe von Persistent Reserve In-Befehlen verfügbar. Das Verhalten des Speichergeräts, wenn ein Persistent Reserve In-Befehl 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 Persistent Reserve In-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 definiert, die erfordert, dass 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 auslagerten 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 Bytes) des Puffers, der für die zurückgegebene Parameterliste zugewiesen ist.

Eingabepufferlänge

Die Länge des Eingabepuffers in Bytes.

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) aufweisen.

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

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

Länge des Ausgabepuffers

Die Länge des Ausgabepuffers in Bytes.

Statusblock

Das Feld Information ist 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 ist auf eine der folgenden Optionen festgelegt:

Wert Bedeutung
STATUS_BUFFER_OVERFLOW (ERROR_MORE_DATA) Der Ausgabepuffer ist zu klein, um die Persistent Reserve In-Daten zu speichern. Das Feld AdditionalLength des Ausgabepuffers enthält die Größe der zurückzugebenden Daten.
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_IN) 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 Eingabe- oder Ausgabepuffer ist für das Gerät oder den Adapter nicht ordnungsgemäß ausgerichtet. Diese status konnte nur zurückgegeben werden, wenn ein Treiber ein IOCTL an den Speicherstapel sendet. Diese status wird nicht zurückgegeben, wenn eine Anwendung im Benutzermodus 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 In nicht.
STATUS_SUCCESS Der Vorgang wurde durchgeführt.

Anforderungen

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