Control de solicitudes de Pass-Through SCSI
Un controlador de clase que genera una solicitud de IOCTL_SCSI_PASS_THROUGH o una solicitud de IOCTL_SCSI_PASS_THROUGH_DIRECT es responsable de lo siguiente:
Establecer la longitud del búfer de usuario en Parameters.DeviceIoControl.InputBufferLength en al menos sizeof(SCSI_PASS_THROUGH) o sizeof(SCSI_PASS_THROUGH_DIRECT)
Configuración de la ubicación de pila de E/S del controlador de puerto de almacenamiento como de costumbre
Establecer MinorFunction en IRP en IRP_MJ_DEVICE_CONTROL, que marca la solicitud como procesada por un controlador de clase de almacenamiento.
Al recibir una IOCTL_SCSI_PASS_THROUGH o IOCTL_SCSI_PASS_THROUGH_DIRECT solicitud de un controlador de nivel superior, la rutina DispatchDeviceControl de un controlador de clase de almacenamiento es responsable de comprobar la validez del comando SCSI insertado (CDB) y, si el comando es válido para su dispositivo, enviando la solicitud al controlador de puerto de almacenamiento.
Si la ubicación de pila de E/S del controlador de puerto para una solicitud de IOCTL_SCSI_PASS_THROUGH o IOCTL_SCSI_PASS_THROUGH_DIRECT no tiene su campo MinorFunction establecido con IRP_MJ_DEVICE_CONTROL, el controlador de puerto asume que la solicitud procede directamente de una aplicación y que no existe ningún controlador de clase para el tipo de dispositivo de destino. Se trata de un error de aplicación para enviar dicha solicitud directamente al controlador de puerto de un dispositivo reclamado por un controlador de clase de almacenamiento.
El controlador de puerto no comprueba la validez del comando SCSI insertado en dicha solicitud de paso a través.