struttura ATA_PASS_THROUGH_DIRECT (ntddscsi.h)

La struttura ATA_PASS_THROUGH_DIRECT viene usata insieme a una richiesta di IOCTL_ATA_PASS_THROUGH_DIRECT per indicare al driver di porta di inviare un comando ATA incorporato al dispositivo di destinazione.

Sintassi

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;

Members

Length

Specifica la lunghezza in byte della struttura ATA_PASS_THROUGH_DIRECT.

AtaFlags

Indica la direzione del trasferimento dei dati e specifica il tipo di operazione da eseguire. Il valore di questo membro deve essere una combinazione dei flag nella tabella seguente.

Flag ATA Significato
ATA_FLAGS_DRDY_REQUIRED Attendere lo stato DRDY dal dispositivo prima di inviare il comando al dispositivo.
ATA_FLAGS_DATA_IN Legge i dati dal dispositivo.
ATA_FLAGS_DATA_OUT Scrivere dati nel dispositivo.
ATA_FLAGS_48BIT_COMMAND Il comando ATA da inviare usa il set di funzionalità LBA (Logical Block Address) a 48 bit. Quando questo flag è impostato, il contenuto del membro PreviousTaskFile nella struttura ATA_PASS_THROUGH_DIRECT deve essere valido.
ATA_FLAGS_USE_DMA Impostare la modalità di trasferimento su DMA.
ATA_FLAGS_NO_MULTIPLE Sola lettura di un singolo settore.

PathId

Contiene un numero intero che indica la porta o il bus dell'IDE per la richiesta. Questo valore viene impostato dal driver della porta.

TargetId

Contiene un numero intero che indica il dispositivo di destinazione nel bus. Questo valore viene impostato dal driver della porta.

Lun

Indica il numero di unità logica del dispositivo. Questo valore viene impostato dal driver della porta.

ReservedAsUchar

Riservato per utilizzi futuri.

DataTransferLength

Indica le dimensioni, in byte, del buffer di dati. Se si verifica una sottorun, il driver miniport deve aggiornare questo membro al numero di byte effettivamente trasferiti.

TimeOutValue

Indica il numero di secondi consentiti per l'esecuzione della richiesta prima che il driver di porta specifico del sistema operativo determini il timeout della richiesta.

ReservedAsUlong

Riservato per utilizzi futuri.

DataBuffer

Puntatore al buffer di dati.

PreviousTaskFile[8]

Specifica il contenuto del registro del file dell'attività di input prima del comando pass-through corrente. Questo membro non viene utilizzato quando il flag ATA_FLAGS_48BIT_COMMAND non è impostato.

CurrentTaskFile[8]

Specifica il contenuto del registro del file di attività sia nell'input che nell'output. In input, i valori della matrice in CurrentTaskFile eseguono il mapping ai registri di input nel modo seguente.

Byte Registro di input
0 Registrazione funzionalità
1 Registro del conteggio dei settori
2 Registro numeri settore
3 Cilindro basso registro
4 Registro alto cilindro
5 Registrazione dispositivo/intestazione
6 Registra comandi
7 Riservato
 

Al termine IOCTL_ATA_PASS_THROUGH_DIRECT , il driver della porta aggiorna CurrentTaskFile con i valori presenti nei registri di output del dispositivo al completamento del comando incorporato. I valori della matrice in CurrentTaskFile corrispondono ai registri di output del file di attività seguenti.

Byte Registro di output
0 Registro errori
1 Registro del conteggio dei settori
2 Registro numeri settore
3 Cilindro basso registro
4 Registro alto cilindro
5 Registrazione dispositivo/intestazione
6 Registro di stato
7 Riservato

Commenti

La struttura ATA_PASS_THROUGH_DIRECT viene utilizzata con IOCTL_ATA_PASS_THROUGH_DIRECT. Con questa richiesta, il sistema blocca il buffer nella memoria utente e il dispositivo accede direttamente a questa memoria. Per un equivalente a doppio buffer di questa richiesta di controllo del dispositivo, vedere IOCTL_ATA_PASS_THROUGH e ATA_PASS_THROUGH_EX.

Requisiti

Requisito Valore
Intestazione ntddscsi.h (include Ntddscsi.h)

Vedi anche

ATA_PASS_THROUGH_EX

IOCTL_ATA_PASS_THROUGH

IOCTL_ATA_PASS_THROUGH_DIRECT