IOCTL_STORAGE_PERSISTENT_RESERVE_IN IOCTL (ntddstor.h)

Il driver della classe di archiviazione generica (classpnp.sys) espone un'interfaccia I/O (IOCTL) per l'emissione di comandi Persistent Reserve In. Il comportamento del dispositivo di archiviazione quando viene ricevuto un comando Riserva persistente in viene descritto nella specifica SCSI Primary Commands - 2 (SPC-2). Per l'interfaccia IOCTL è necessario che il chiamante abbia accesso in lettura al dispositivo fisico per i comandi Persistent Reserve In. Le applicazioni, i servizi e i driver in modalità kernel possono usare questo IOCTL per controllare le prenotazioni persistenti. Se viene chiamato da un driver, questo IOCTL deve essere chiamato da un thread in esecuzione in IRQL < DISPATCH_LEVEL. Questo IOCTL viene definito con FILE_READ_ACCESS, richiedendo a un handle di dispositivo le autorizzazioni di lettura per rilasciare il comando Riserva persistente in .

Codice principale

IRP_MJ_DEVICE_CONTROL

Buffer di input

Il buffer in Irp-AssociatedIrp.SystemBuffer> contiene una struttura PERSISTENT_RESERVE_COMMAND. È necessario allocare il buffer dal pool non in pagine e allinearlo correttamente per il dispositivo di destinazione e l'adattatore.

PR_IN. ServiceAction può essere uno dei seguenti:

  • RESERVATION_ACTION_READ_KEYS
  • RESERVATION_ACTION_READ_RESERVATIONS

PR_IN. La lunghezza di allocazione è la dimensione in byte del buffer allocato per l'elenco di parametri restituiti.

Lunghezza del buffer di input

Lunghezza del buffer di input, in byte.

Buffer di output

Per PR_IN. ServiceAction = RESERVATION_ACTION_READ_KEYS, il buffer di output contiene una struttura PRI_REGISTRATION_LIST e deve essere almeno sizeof(PRI_REGISTRATION_LIST).

Per PR_IN. ServiceAction = RESERVATION_ACTION_READ_RESERVATIONS, il buffer di output contiene una struttura PRI_RESERVATION_LIST e deve essere almeno sizeof(PRI_RESERVATION_LIST).

Se il buffer allocato è troppo piccolo per restituire tutti i dati di Riserva persistente nei dati, l'esito positivo verrà restituito e le dimensioni necessarie verranno restituite nel campo AdditionalLength dell'elenco di parametri.

Lunghezza del buffer di output

Lunghezza del buffer di output, in byte.

Blocco dello stato

Il campo Informazioni è impostato sulle dimensioni del buffer di output. Per ServiceAction = RESERVATION_ACTION_READ_KEYS, il buffer di output è una struttura PRI_REGISTRATION_LIST . Per ServiceAction = RESERVATION_ACTION_READ_RESERVATIONS, il buffer di output è una struttura PRI_REGISTRATION_LIST .

Il campo Stato è impostato su uno dei seguenti:

Valore Significato
STATUS_BUFFER_OVERFLOW (ERROR_MORE_DATA) Il buffer di output è troppo piccolo per contenere i dati Di riserva persistente. Il campo AdditionalLength del buffer di output conterrà le dimensioni dei dati da restituire.
STATUS_DEVICE_BUSY (ERROR_BUSY) Il comando non è riuscito a causa di un conflitto di prenotazione (per altre informazioni, vedere la specifica SCSI Primary Commands - 2 (SPC-2)**).
STATUS_INFO_LENGTH_MISMATCH La lunghezza del buffer di input per IOCTL è minore di sizeof(PERSISTENT_RESERVE_COMMAND) o la dimensione specificata nella struttura dei dati PERSISTENT_RESERVE_COMMAND è minore di sizeof(PERSISTENT_RESERVE_COMMAND).
STATUS_INVALID_DEVICE_REQUEST (ERROR_INVALID_FUNCTION) Il codice di controllo di I/O (IOCTL_STORAGE_PERSISTENT_RESERVE_IN) non è supportato dai driver di archiviazione.
STATUS_INVALID_PARAMETER (ERROR_INVALID_PARAMETER) La struttura del buffer di input viene ridimensionata o popolata in modo non corretto.
STATUS_INVALID_USER_BUFFER (ERROR_INVALID_USER_BUFFER) Il buffer di input o di output non è allineato correttamente per il dispositivo o l'adattatore. Questo stato può essere restituito solo quando un driver invia un IOCTL allo stack di archiviazione. Questo stato non verrà restituito quando un'applicazione in modalità utente invia l'IOCTL tramite l'API DeviceIoControl perché Gestione I/O allinea automaticamente i buffer.
STATUS_IO_DEVICE_ERROR (ERROR_IO_DEVICE) Il dispositivo non supporta il comando Riserva persistente in.
STATUS_SUCCESS L'operazione è stata completata.

Requisiti

Requisito Valore
Intestazione ntddstor.h (include Ntddstor.h)