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