estructura ATA_PASS_THROUGH_EX (ntddscsi.h)
La estructura ATA_PASS_THROUGH_EX se usa junto con una solicitud de IOCTL_ATA_PASS_THROUGH para indicar al controlador de puerto que envíe un comando ATA incrustado al dispositivo de destino.
Sintaxis
typedef struct _ATA_PASS_THROUGH_EX {
USHORT Length;
USHORT AtaFlags;
UCHAR PathId;
UCHAR TargetId;
UCHAR Lun;
UCHAR ReservedAsUchar;
ULONG DataTransferLength;
ULONG TimeOutValue;
ULONG ReservedAsUlong;
ULONG_PTR DataBufferOffset;
UCHAR PreviousTaskFile[8];
UCHAR CurrentTaskFile[8];
} ATA_PASS_THROUGH_EX, *PATA_PASS_THROUGH_EX;
Miembros
Length
Especifica la longitud en bytes de la estructura ATA_PASS_THROUGH_EX.
AtaFlags
Indica la dirección de la transferencia de datos y especifica el tipo de operación que se va a realizar. El valor de este miembro debe ser una combinación de las marcas siguientes:
Marcas de ATA | Significado |
---|---|
ATA_FLAGS_DRDY_REQUIRED | Espere el estado drDY del dispositivo antes de enviar el comando al dispositivo. |
ATA_FLAGS_DATA_IN | Lee datos del dispositivo. |
ATA_FLAGS_DATA_OUT | Escribir datos en el dispositivo. |
ATA_FLAGS_48BIT_COMMAND | El comando de ATA que se va a enviar usa el conjunto de características de dirección de bloque lógico (LBA) de 48 bits. Cuando se establece esta marca, el contenido del miembro PreviousTaskFile de la estructura ATA_PASS_THROUGH_EX debe ser válido. |
ATA_FLAGS_USE_DMA | Establezca el modo de transferencia en DMA. |
ATA_FLAGS_NO_MULTIPLE | Solo lectura de un solo sector. |
PathId
Contiene un entero que indica el puerto o bus del IDE para la solicitud. El controlador de puerto establece este valor.
TargetId
Contiene un entero que indica el dispositivo de destino en el bus. El controlador de puerto establece este valor.
Lun
Indica el número de unidad lógica del dispositivo. El controlador de puerto establece este valor.
ReservedAsUchar
Reservado para uso futuro.
DataTransferLength
Indica el tamaño, en bytes, del búfer de datos. Si se produce una ejecución inferior, el controlador de minipuerto debe actualizar este miembro al número de bytes transferidos realmente.
TimeOutValue
Indica el número de segundos que se permiten para que la solicitud se ejecute antes de que el controlador de puerto específico del sistema operativo determine que la solicitud ha agotado el tiempo de espera.
ReservedAsUlong
Reservado para uso futuro.
DataBufferOffset
Especifica el desplazamiento, en bytes, desde el principio de esta estructura hasta el búfer de datos.
PreviousTaskFile[8]
Especifica el contenido de los registros de entrada del archivo de tareas antes del comando de paso a través actual. Este miembro no se usa cuando no se establece la marca ATA_FLAGS_48BIT_COMMAND.
CurrentTaskFile[8]
Especifica el contenido del registro del archivo de tareas en la entrada y la salida. En la entrada, los valores de matriz de CurrentTaskFile se asignan a los registros de entrada del archivo de tareas de la siguiente manera.
Byte | Registro de entrada |
---|---|
0 | Registro de características |
1 | Registro de recuento de sectores |
2 | Registro de número de sector |
3 | Registro bajo de cilindro |
4 | Registro alto del cilindro |
5 | Registro de dispositivo/cabeza |
6 | Registro de comandos |
7 | Reservado |
Cuando se completa IOCTL_ATA_PASS_THROUGH , el controlador de puerto actualiza CurrentTaskFile con los valores presentes en los registros de salida del dispositivo al finalizar el comando incrustado. Los valores de matriz de CurrentTaskFile corresponden a los siguientes registros de salida del archivo de tareas.
Byte | Registro de salida |
---|---|
0 | Registro de errores |
1 | Registro de recuento de sectores |
2 | Registro de número de sector |
3 | Registro bajo de cilindro |
4 | Registro alto del cilindro |
5 | Registro de dispositivo/cabeza |
6 | Registro de estado |
7 | Reservado |
Comentarios
IOCTL_ATA_PASS_THROUGH es una solicitud de control de dispositivo almacenado en búfer. Para omitir el almacenamiento en búfer en la memoria del sistema, los llamadores deben usar IOCTL_ATA_PASS_THROUGH_DIRECT y ATA_PASS_THROUGH_DIRECT. Al controlar una solicitud de IOCTL_ATA_PASS_THROUGH_DIRECT, el sistema bloquea el búfer en la memoria del usuario y el dispositivo accede directamente a esta memoria.
Requisitos
Requisito | Valor |
---|---|
Header | ntddscsi.h (incluya Ntddscsi.h) |