estrutura ATA_PASS_THROUGH_DIRECT (ntddscsi.h)

A estrutura ATA_PASS_THROUGH_DIRECT é usada em conjunto com uma solicitação de IOCTL_ATA_PASS_THROUGH_DIRECT para instruir o driver de porta a enviar um comando ATA inserido para o dispositivo de destino.

Sintaxe

typedef struct _ATA_PASS_THROUGH_DIRECT {
  USHORT Length;
  USHORT AtaFlags;
  UCHAR  PathId;
  UCHAR  TargetId;
  UCHAR  Lun;
  UCHAR  ReservedAsUchar;
  ULONG  DataTransferLength;
  ULONG  TimeOutValue;
  ULONG  ReservedAsUlong;
  PVOID  DataBuffer;
  UCHAR  PreviousTaskFile[8];
  UCHAR  CurrentTaskFile[8];
} ATA_PASS_THROUGH_DIRECT, *PATA_PASS_THROUGH_DIRECT;

Membros

Length

Especifica o comprimento em bytes da estrutura de ATA_PASS_THROUGH_DIRECT.

AtaFlags

Indica a direção da transferência de dados e especifica o tipo de operação a ser executada. O valor desse membro deve ser alguma combinação dos sinalizadores na tabela a seguir.

Sinalizadores do ATA Significado
ATA_FLAGS_DRDY_REQUIRED Aguarde o status DRDY do dispositivo antes de enviar o comando para o dispositivo.
ATA_FLAGS_DATA_IN Ler dados do dispositivo.
ATA_FLAGS_DATA_OUT Gravar dados no dispositivo.
ATA_FLAGS_48BIT_COMMAND O comando do ATA a ser enviado usa o conjunto de recursos LBA (endereço de bloco lógico) de 48 bits. Quando esse sinalizador é definido, o conteúdo do membro PreviousTaskFile na estrutura ATA_PASS_THROUGH_DIRECT deve ser válido.
ATA_FLAGS_USE_DMA Defina o modo de transferência como DMA.
ATA_FLAGS_NO_MULTIPLE Ler somente setor único.

PathId

Contém um inteiro que indica a porta ou o barramento do IDE para a solicitação. Esse valor é definido pelo driver de porta.

TargetId

Contém um inteiro que indica o dispositivo de destino no barramento. Esse valor é definido pelo driver de porta.

Lun

Indica o número da unidade lógica do dispositivo. Esse valor é definido pelo driver de porta.

ReservedAsUchar

Reservado para uso futuro.

DataTransferLength

Indica o tamanho, em bytes, do buffer de dados. Se ocorrer uma subexecutação, o driver de miniporto deverá atualizar esse membro para o número de bytes realmente transferidos.

TimeOutValue

Indica o número de segundos permitidos para a solicitação ser executada antes que o driver de porta específico do sistema operacional determine que a solicitação atingiu o tempo limite.

ReservedAsUlong

Reservado para uso futuro.

DataBuffer

Ponteiro para o buffer de dados.

PreviousTaskFile[8]

Especifica o conteúdo do registro do arquivo de tarefa de entrada antes do comando de passagem atual. Esse membro não é usado quando o sinalizador ATA_FLAGS_48BIT_COMMAND não está definido.

CurrentTaskFile[8]

Especifica o conteúdo do registro do arquivo de tarefa na entrada e na saída. Na entrada, os valores de matriz em CurrentTaskFile são mapeados para os registros de entrada da maneira a seguir.

Byte Registro de Entrada
0 Registro de Recursos
1 Registro de Contagem de Setores
2 Registro de Número do Setor
3 Registro baixo do cilindro
4 Registro Alto do Cilindro
5 Registro de dispositivo/cabeçalho
6 Registro de Comando
7 Reservado
 

Quando IOCTL_ATA_PASS_THROUGH_DIRECT é concluído, o driver de porta atualiza CurrentTaskFile com os valores presentes nos registros de saída do dispositivo na conclusão do comando inserido. Os valores de matriz em CurrentTaskFile correspondem aos seguintes registros de saída do arquivo de tarefa.

Byte Registro de Saída
0 Registro de Erro
1 Registro de Contagem de Setores
2 Registro de Número do Setor
3 Registro baixo do cilindro
4 Registro Alto do Cilindro
5 Registro de dispositivo/cabeçalho
6 Registro de Status
7 Reservado

Comentários

A estrutura ATA_PASS_THROUGH_DIRECT é usada com IOCTL_ATA_PASS_THROUGH_DIRECT. Com essa solicitação, o sistema bloqueia o buffer na memória do usuário e o dispositivo acessa essa memória diretamente. Para obter um equivalente de buffer duplo dessa solicitação de controle de dispositivo, consulte IOCTL_ATA_PASS_THROUGH e ATA_PASS_THROUGH_EX.

Requisitos

Requisito Valor
Cabeçalho ntddscsi.h (inclua Ntddscsi.h)

Confira também

ATA_PASS_THROUGH_EX

IOCTL_ATA_PASS_THROUGH

IOCTL_ATA_PASS_THROUGH_DIRECT