Compartilhar via


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 comandos primários SCSI – 2 (SPC-2). A interface IOCTL exige 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 do usuário 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 Reserva Persistente.

Código principal

IRP_MJ_DEVICE_CONTROL

Buffer de entrada

O buffer em Irp-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 e o adaptador de destino.

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 Informações é 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 é compatível com os 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. Essa status só pode ser retornada quando um driver envia um IOCTL para a pilha de armazenamento. Essa status não é retornada 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 Reserva Persistente.
STATUS_SUCCESS A operação foi bem-sucedida.

Requisitos

Requisito Valor
Cabeçalho ntddstor.h (inclua Ntddstor.h)