IOCTL_MPIO_PASS_THROUGH_PATH_DIRECT IOCTL (ntddscsi.h)

Esse código de controle de E/S permite que um driver de aplicativo ou kernel envie um comando SCSI para um LUN real designado. As seguintes restrições se aplicam ao uso deste código de controle de E/S:

  • Se existir um driver de classe para o pseudo LUN, o aplicativo deverá enviar a solicitação para esse driver de classe. Assim, um aplicativo poderá enviar essa solicitação diretamente para um MPIO somente se não houver nenhum driver de classe para o dispositivo.
  • Todas as solicitações de passagem devem ser síncronas.
  • Os aplicativos não exigem privilégios administrativos para enviar uma solicitação de passagem para um dispositivo, mas devem ter acesso de leitura/gravação ao dispositivo.
  • A solicitação compreende uma solicitação de passagem SCSI (em uma estrutura de SCSI_PASS_THROUGH_DIRECT inserida), bem como determinadas diretivas.
  • A estrutura de passagem scsi deve atender aos requisitos para isso, conforme descrito em SCSI_PASS_THROUGH_DIRECT.
  • Se a solicitação for enviada por meio do DSM que reivindicou o LUN real, isso deve ser indicado. Nesse caso, o próprio DSM deve indicar o mesmo LUN real. Caso contrário, a solicitação vai falhar.
  • A solicitação deve especificar o LUN real que é composto pelo pseudo LUN em termos do endereço SCSI do primeiro ou de seu MPIO PathId, mas não ambos.

Código principal

IRP_MJ_DEVICE_CONTROL

Buffer de entrada

Parameters.DeviceIoControl.InputBufferLength indica o tamanho, em bytes, do buffer em Irp-AssociatedIrp.SystemBuffer>.

Comprimento do buffer de entrada

O buffer deve ser pelo menos sizeof(MPIO_PASS_THROUGH_PATH) ou, se enviado por um aplicativo de 32 bits em um sistema operacional de 64 bits, sizeof(MPIO_PASS_THROUGH_PATH32).

Buffer de saída

O driver de porta retorna todos os dados de solicitação e todos os dados transferidos do dispositivo para o buffer em Irp-AssociatedIrp.SystemBuffer>.

Comprimento do buffer de saída

O SenseInfoLength e o DataTransferLength na estrutura de SCSI_PASS_THROUGH_DIRECT inserida são atualizados para indicar a quantidade de dados transferidos.

Bloco de status

O campo Informações é definido como o número de bytes retornados no buffer de saída em Irp-AssociatedIrp.SystemBuffer>. O campo Status é definido como STATUS_SUCCESS ou possivelmente para STATUS_BUFFER_TOO_SMALL ou STATUS_INVALID_PARAMETER se o valor length de entrada no SCSI_PASS_THROUGH_DIRECT inserido for definido incorretamente.

Requisitos

Requisito Valor
Cabeçalho ntddscsi.h (inclua Ntddscsi.h)

Confira também

MPIO_PASS_THROUGH_PATH_DIRECT

SCSI_PASS_THROUGH_DIRECT