Compartilhar via


IOCTL_STORAGE_PERSISTENT_RESERVE_IN 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 em. O comportamento do dispositivo de armazenamento quando um comando Reserva Persistente em é recebido é descrito na especificação comandos primários SCSI – 2 (SPC-2). A interface IOCTL exige que o chamador tenha acesso de leitura ao dispositivo físico para comandos de Reserva Persistente em. 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, exigindo que um identificador de dispositivo tenha permissões de leitura para emitir o comando Reserva Persistente em.

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_IN. ServiceAction pode ser um dos seguintes:

  • RESERVATION_ACTION_READ_KEYS
  • RESERVATION_ACTION_READ_RESERVATIONS

PR_IN. O tamanho da alocação é o tamanho (em bytes) do buffer alocado para a lista de parâmetros retornada.

Comprimento do buffer de entrada

O comprimento do buffer de entrada, em bytes.

Buffer de saída

Por PR_IN. ServiceAction = RESERVATION_ACTION_READ_KEYS, o buffer de saída contém uma estrutura PRI_REGISTRATION_LIST e deve ser pelo menos sizeof(PRI_REGISTRATION_LIST).

Por PR_IN. ServiceAction = RESERVATION_ACTION_READ_RESERVATIONS, o buffer de saída contém uma estrutura PRI_RESERVATION_LIST e deve ser pelo menos sizeof(PRI_RESERVATION_LIST).

Se o buffer alocado for muito pequeno para retornar todos os dados de Reserva Persistente em, o êxito será retornado e o tamanho necessário será retornado no campo AdditionalLength da lista de parâmetros.

Comprimento do buffer de saída

O comprimento do buffer de saída, em bytes.

Bloco de status

O campo Informações é definido como o tamanho do buffer de saída. Para ServiceAction = RESERVATION_ACTION_READ_KEYS, o buffer de saída é uma estrutura PRI_REGISTRATION_LIST . Para ServiceAction = RESERVATION_ACTION_READ_RESERVATIONS, o buffer de saída é uma estrutura PRI_REGISTRATION_LIST .

O campo Status é definido como um dos seguintes:

Valor Significado
STATUS_BUFFER_OVERFLOW (ERROR_MORE_DATA) O buffer de saída é muito pequeno para conter os dados de Reserva Persistente. O campo AdditionalLength do buffer de saída conterá o tamanho dos dados a serem retornados.
STATUS_DEVICE_BUSY (ERROR_BUSY) O comando falhou devido a um conflito de reserva (para obter mais informações, consulte a especificação Comandos Primários do SCSI – 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_IN) 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 ou saída não está alinhado corretamente para o dispositivo ou adaptador. Essa status só pôde ser retornada quando um driver envia um IOCTL para a pilha de armazenamento. Essa status não será retornada quando um aplicativo de modo de usuário enviar 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 em.
STATUS_SUCCESS A operação foi bem-sucedida.

Requisitos

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