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