IOCTL_STORAGE_PERSISTENT_RESERVE_OUT IOCTL (ntddstor.h)
O driver de classe de armazenamento genérico (classpnp.sys) expõe uma interface IOCTL (controle de E/S) para emitir comandos de Reserva Persistente. O comportamento do dispositivo de armazenamento quando um comando de Reserva Persistente é recebido é descrito na especificação SCSI Primary Commands – 2 (SPC-2). A interface IOCTL requer que o chamador tenha acesso de leitura/gravação ao dispositivo físico para comandos de Reserva Persistente. Aplicativos, serviços e drivers no modo kernel podem usar esse IOCTL para controlar reservas persistentes. Se chamado de um driver, esse IOCTL deve ser chamado de um thread em execução no IRQL < DISPATCH_LEVEL. Esse IOCTL é definido com FILE_READ_ACCESS e FILE_WRITE_ACCESS, exigindo que um identificador de dispositivo tenha permissões de leitura e gravação para emitir o comando Persistent Reserve Out.
Código principal
Buffer de entrada
O buffer em > AssociatedIrp.SystemBuffer contém uma estrutura PERSISTENT_RESERVE_COMMAND. Você deve alocar o buffer do pool nãopagado e deve alinhá-lo corretamente para o dispositivo de destino e o adaptador.
PR_OUT. ServiceAction pode ser um dos seguintes:
- 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. O escopo pode ser um dos seguintes:
- RESERVATION_SCOPE_LU
- RESERVATION_SCOPE_ELEMENT
PR_OUT. O tipo pode ser um dos seguintes:
- RESERVATION_TYPE_WRITE_EXCLUSIVE
- RESERVATION_TYPE_EXCLUSIVE
- RESERVATION_TYPE_WRITE_EXCLUSIVE_REGISTRANTS
- RESERVATION_TYPE_EXCLUSIVE_REGISTRANTS
PR_OUT. ParameterList é usado para manter a estrutura PRO_PARAMETER_LIST. Essa estrutura é necessária e deve ser contígua com o restante da estrutura PERSISTENT_RESERVE_COMMAND.
Comprimento do buffer de entrada
O comprimento de uma estrutura PERSISTENT_RESERVE_COMMAND.
Buffer de saída
Nenhum.
Comprimento do buffer de saída
Nenhum.
Bloco de status
O campo de Informações do está definido como zero.
O campo Status é definido como um dos valores a seguir.
Valor | Significado |
---|---|
STATUS_DEVICE_BUSY (ERROR_BUSY) | O comando falhou devido a um conflito de reserva (para obter mais informações, consulte a especificação scsi primary commands – 2 (SPC-2). |
STATUS_INFO_LENGTH_MISMATCH | O comprimento do buffer de entrada para o IOCTL é menor que sizeof(PERSISTENT_RESERVE_COMMAND) ou o tamanho especificado na estrutura de dados PERSISTENT_RESERVE_COMMAND é menor que sizeof(PERSISTENT_RESERVE_COMMAND). |
STATUS_INVALID_DEVICE_REQUEST (ERROR_INVALID_FUNCTION) | O código de controle de E/S (IOCTL_STORAGE_PERSISTENT_RESERVE_OUT) não é suportado pelos drivers de armazenamento. |
STATUS_INVALID_PARAMETER (ERROR_INVALID_PARAMETER) | A estrutura do buffer de entrada é dimensionada ou preenchida incorretamente. |
STATUS_INVALID_USER_BUFFER (ERROR_INVALID_USER_BUFFER) | O buffer de entrada não está alinhado corretamente para o dispositivo ou adaptador. Esse status só pode ser retornado quando um driver envia um IOCTL para a pilha de armazenamento. Esse status não é retornado quando um aplicativo de modo de usuário envia o IOCTL por meio da API DeviceIoControl, pois o Gerenciador de E/S alinha automaticamente os buffers. |
STATUS_IO_DEVICE_ERROR (ERROR_IO_DEVICE) | O dispositivo não dá suporte ao comando Persistent Reserve Out. |
STATUS_SUCCESS | A operação foi bem-sucedida. |
Requisitos
Requisito | Valor |
---|---|
cabeçalho | ntddstor.h (include Ntddstor.h) |