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)

Consulte también

ATA_PASS_THROUGH_DIRECT

IOCTL_ATA_PASS_THROUGH

IOCTL_ATA_PASS_THROUGH_DIRECT