Condividi tramite


IOCTL_STORAGE_PERSISTENT_RESERVE_OUT IOCTL (ntddstor.h)

Il driver di classe di archiviazione generico (classpnp.sys) espone un'interfaccia di controllo I/O (IOCTL) per l'emissione di comandi Persistent Reserve Out. Il comportamento del dispositivo di archiviazione quando viene ricevuto un comando Persistent Reserve Out viene descritto nella specifica SCSI Primary Commands - 2 (SPC-2). L'interfaccia IOCTL richiede che il chiamante disponga dell'accesso in lettura/scrittura al dispositivo fisico per i comandi Persistent Reserve Out. Le applicazioni in modalità utente, 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 un handle del dispositivo per avere autorizzazioni di lettura e scrittura per emettere il comando Persistent Reserve Out.

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 a pagina e deve 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 è necessaria 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 dello 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 prenotazioni (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 di dati PERSISTENT_RESERVE_COMMAND è minore di sizeof(PERSISTENT_RESERVE_COMMAND).
STATUS_INVALID_DEVICE_REQUEST (ERROR_INVALID_FUNCTION) Il codice di controllo 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 errato.
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 come gestione I/O allinea automaticamente i buffer.
STATUS_IO_DEVICE_ERROR (ERROR_IO_DEVICE) Il dispositivo non supporta il comando Persistent Reserve Out.
STATUS_SUCCESS L'operazione è stata completata.

Requisiti

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