Partilhar via


Manipulando solicitações de Pass-Through SCSI

Um driver de classe que gera uma solicitação de IOCTL_SCSI_PASS_THROUGH ou uma solicitação de IOCTL_SCSI_PASS_THROUGH_DIRECT é responsável pelo seguinte:

  • Definindo o comprimento do buffer de usuário em Parameters.DeviceIoControl.InputBufferLength como pelo menos sizeof(SCSI_PASS_THROUGH) ou sizeof(SCSI_PASS_THROUGH_DIRECT)

  • Configurando o local da pilha de E/S do driver de porta de armazenamento como de costume

  • Definir MinorFunction no IRP como IRP_MJ_DEVICE_CONTROL, que marca a solicitação como tendo sido processada por um driver de classe de armazenamento.

Ao receber uma solicitação de IOCTL_SCSI_PASS_THROUGH ou IOCTL_SCSI_PASS_THROUGH_DIRECT de um driver de nível superior, a rotina DispatchDeviceControl de um driver de classe de armazenamento é responsável por verificar a validade do comando SCSI inserido (CDB) e, se o comando for válido para seu dispositivo, enviar a solicitação para o driver da porta de armazenamento.

Se o local da pilha de E/S do driver de porta para um IOCTL_SCSI_PASS_THROUGH ou IOCTL_SCSI_PASS_THROUGH_DIRECT solicitação não tiver seu campo MinorFunction definido com IRP_MJ_DEVICE_CONTROL, o driver de porta assumirá que a solicitação veio diretamente de um aplicativo e que nenhum driver de classe existe para o tipo de dispositivo de destino. É um erro do aplicativo enviar essa solicitação diretamente ao driver de porta para um dispositivo que foi reivindicado por um driver de classe de armazenamento.

O driver de porta não marcar a validade do comando SCSI inserido nessa solicitação de passagem.