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.