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