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