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