estructura SCSI_PASS_THROUGH_EX (ntddscsi.h)
La estructura SCSI_PASS_THROUGH_EX se usa junto con una solicitud de IOCTL_SCSI_PASS_THROUGH_EX para indicar al controlador de puerto que envíe un comando SCSI incrustado al dispositivo de destino. SCSI_PASS_THROUGH_EX puede contener transferencias de datos bidireccionales y un bloque de datos de comando de longitud variable.
Nota
Los modelos del controlador de puerto SCSI y del controlador de miniporte SCSI pueden modificarse o no estar disponibles en el futuro. En su lugar, use el controlador Storport y los modelos de controlador de miniport storport .
Sintaxis
typedef struct _SCSI_PASS_THROUGH_EX {
ULONG Version;
ULONG Length;
ULONG CdbLength;
ULONG StorAddressLength;
UCHAR ScsiStatus;
UCHAR SenseInfoLength;
UCHAR DataDirection;
UCHAR Reserved;
ULONG TimeOutValue;
ULONG StorAddressOffset;
ULONG SenseInfoOffset;
ULONG DataOutTransferLength;
ULONG DataInTransferLength;
ULONG_PTR DataOutBufferOffset;
ULONG_PTR DataInBufferOffset;
UCHAR Cdb[ANYSIZE_ARRAY];
} SCSI_PASS_THROUGH_EX, *PSCSI_PASS_THROUGH_EX;
Miembros
Version
Versión de esta estructura. Establecer en 0.
Length
Tamaño de esta estructura, en bytes. Establézcalo en sizeof(SCSI_PASS_THROUGH_EX)
.
CdbLength
Tamaño del bloque del descriptor de comandos SCSI en Cdb, en bytes.
StorAddressLength
Longitud, en bytes, de la estructura de direcciones del dispositivo de almacenamiento en el desplazamiento de StorAddressOffset después de esta estructura.
ScsiStatus
Informa del estado SCSI devuelto por el HBA o el dispositivo de destino.
SenseInfoLength
Tamaño en bytes del búfer de detección de solicitudes. Este miembro es opcional y se puede establecer en 0.
DataDirection
Indica si el comando SCSI leerá o escribirá datos. Este campo debe ser uno de los siguientes valores:
Valor | Significado |
---|---|
SCSI_IOCTL_DATA_OUT | Escriba datos en el dispositivo. |
SCSI_IOCTL_DATA_IN | Lee datos del dispositivo. |
SCSI_IOCTL_DATA_UNSPECIFIED | No se transfieren datos. |
SCSI_IOCTL_DATA_BIDIRECTIONAL | Los datos son válidos para la entrada y la salida. |
Reserved
Reservado. Establecer en 0.
TimeOutValue
Indica el intervalo en segundos que la solicitud puede ejecutarse antes de que el controlador de puerto considere que ha agotado el tiempo de espera.
StorAddressOffset
Ubicación de la estructura de direcciones del dispositivo de almacenamiento de destino, en bytes, desde el principio de esta estructura.
SenseInfoOffset
Desfase desde el principio de esta estructura hasta el búfer de detección de solicitudes. Establezca en 0 si no hay ningún búfer de detección de solicitudes presente.
DataOutTransferLength
Indica el tamaño en bytes del búfer de datos de salida. Muchos dispositivos transfieren fragmentos de datos de longitud predefinida. El valor de DataOutTransferLength debe ser un múltiplo entero de esta longitud mínima predefinida especificada por el dispositivo. Si se produce una ejecución inferior, el controlador de minipuerto debe actualizar este miembro al número de bytes transferidos realmente. Si no hay ningún búfer de datos de salida, este miembro se establece en 0.
DataInTransferLength
Indica el tamaño en bytes del búfer de datos de entrada. Muchos dispositivos transfieren fragmentos de datos de longitud predefinida. El valor de DataInTransferLength debe ser un múltiplo entero de esta longitud mínima predefinida especificada por el dispositivo. Si se produce una ejecución inferior, el controlador de minipuerto debe actualizar este miembro al número de bytes transferidos realmente. Si no hay ningún búfer de datos de entrada, este miembro se establece en 0.
DataOutBufferOffset
Contiene un desplazamiento desde el principio de esta estructura hasta el búfer de datos de salida. El desplazamiento debe respetar los requisitos de alineación de datos del dispositivo.
DataInBufferOffset
Contiene un desplazamiento desde el principio de esta estructura hasta el búfer de datos de entrada. El desplazamiento debe respetar los requisitos de alineación de datos del dispositivo.
Cdb[ANYSIZE_ARRAY]
Especifica el bloque de descriptor de comandos SCSI que se va a enviar al dispositivo de destino.
Comentarios
La estructura SCSI_PASS_THROUGH_EX se usa con el código de control IOCTL_SCSI_PASS_THROUGH_EX , que es una solicitud de control de dispositivo almacenado en búfer. Para omitir el almacenamiento en búfer en la memoria del sistema, los autores de llamadas deben usar IOCTL_SCSI_PASS_THROUGH_DIRECT_EX. Al controlar una solicitud de IOCTL_SCSI_PASS_THROUGH_DIRECT_EX , el sistema bloquea el búfer en la memoria del usuario y el dispositivo accede directamente a esta memoria.
Nota
Los controladores que se ejecutan en una versión de 64 bits de Windows deben usar la estructura de SCSI_PASS_THROUGH32_EX como tipo de datos de solicitud al controlar una solicitud de IOCTL_SCSI_PASS_THROUGH_EX desde un proceso de 32 bits.
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible | Disponible a partir de Windows 8. |
Encabezado | ntddscsi.h (incluya Ntddscsi.h) |