Condividi tramite


IOCTL_STORAGE_PERSISTENT_RESERVE_OUT IOCTL (ntddstor.h)

Il driver della classe di archiviazione generica (classpnp.sys) espone un'interfaccia I/O control (IOCTL) per l'emissione di comandi Persistent Reserve Out. Il comportamento del dispositivo di archiviazione quando viene ricevuto un comando Riserva persistente viene descritto nella specifica SCSI Primary Commands - 2 (SPC-2). L'interfaccia IOCTL richiede al chiamante l'accesso in lettura/scrittura al dispositivo fisico per i comandi Persistent Reserve Out. 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 e FILE_WRITE_ACCESS, richiedendo a un handle del dispositivo di avere autorizzazioni di lettura e scrittura per rilasciare il comando Riserva persistente out.

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_OUT. ServiceAction può essere uno dei seguenti:

  • RESERVATION_ACTION_REGISTER
  • RESERVATION_ACTION_RESERVE
  • RESERVATION_ACTION_RELEASE
  • RESERVATION_ACTION_CLEAR
  • RESERVATION_ACTION_PREEMPT
  • RESERVATION_ACTION_PREEMPT_ABORT
  • RESERVATION_ACTION_REGISTER_IGNORE_EXISTING

PR_OUT. L'ambito può essere uno dei seguenti:

  • RESERVATION_SCOPE_LU
  • RESERVATION_SCOPE_ELEMENT

PR_OUT. Il tipo può essere uno dei seguenti:

  • RESERVATION_TYPE_WRITE_EXCLUSIVE
  • RESERVATION_TYPE_EXCLUSIVE
  • RESERVATION_TYPE_WRITE_EXCLUSIVE_REGISTRANTS
  • RESERVATION_TYPE_EXCLUSIVE_REGISTRANTS

PR_OUT. ParameterList viene usato per contenere la struttura PRO_PARAMETER_LIST. Questa struttura è obbligatoria e deve essere contigua con il resto della struttura PERSISTENT_RESERVE_COMMAND.

Lunghezza del buffer di input

Lunghezza di una struttura PERSISTENT_RESERVE_COMMAND.

Buffer di output

Nessuno.

Lunghezza del buffer di output

Nessuno.

Blocco di stato

Il campo informazioni è impostato su zero.

Il campo Stato è impostato su uno dei valori seguenti.

Valore Significato
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_OUT) 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 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 viene restituito quando un'applicazione in modalità utente invia L'IOCTL tramite l'API DeviceIoControl mentre Gestione I/O allinea automaticamente i buffer.
STATUS_IO_DEVICE_ERROR (ERROR_IO_DEVICE) Il dispositivo non supporta il comando Riserva persistente out.
STATUS_SUCCESS Operazione riuscita.

Fabbisogno

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