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) |