Condividi tramite


IOCTL_STORAGE_PERSISTENT_RESERVE_IN IOCTL (ntddstor.h)

Il driver della classe di archiviazione generica (classpnp.sys) espone un'interfaccia I/O control (IOCTL) per l'emissione di comandi Di riserva persistente nei comandi. Il comportamento del dispositivo di archiviazione quando viene ricevuto un comando Riserva persistente in viene descritto nella specifica SCSI Primary Commands - 2 (SPC-2). L'interfaccia IOCTL richiede al chiamante l'accesso in lettura al dispositivo fisico per i comandi Riserva persistente 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 corrispondenza Irp->AssociatedIrp.SystemBuffer contiene una struttura PERSISTENT_RESERVE_COMMAND. È necessario allocare il buffer dal pool non di paging e allinearlo correttamente per il dispositivo e l'adattatore di destinazione.

PR_IN. ServiceAction può essere uno dei seguenti:

  • RESERVATION_ACTION_READ_KEYS
  • RESERVATION_ACTION_READ_RESERVATIONS

PR_IN. La lunghezza dell'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, verrà restituito l'esito positivo e le dimensioni necessarie verranno restituite nell'elenco dei parametri campo AdditionalLength.

Lunghezza del buffer di output

Lunghezza del buffer di output, in byte.

Blocco di 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 la riserva permanente nei dati. 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 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 Operazione riuscita.

Fabbisogno

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