Partager via


structure ATA_PASS_THROUGH_EX (ntddscsi.h)

La structure ATA_PASS_THROUGH_EX est utilisée conjointement avec une demande de IOCTL_ATA_PASS_THROUGH pour indiquer au pilote de port d’envoyer une commande ATA incorporée à l’appareil cible.

Syntaxe

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;

Membres

Length

Spécifie la longueur en octets de la structure ATA_PASS_THROUGH_EX.

AtaFlags

Indique la direction du transfert de données et spécifie le type d’opération à effectuer. La valeur de ce membre doit être une combinaison des indicateurs suivants :

Indicateurs ATA Signification
ATA_FLAGS_DRDY_REQUIRED Attendez l’état DRDY de l’appareil avant d’envoyer la commande à l’appareil.
ATA_FLAGS_DATA_IN Lit les données de l’appareil.
ATA_FLAGS_DATA_OUT Écrivez des données sur l’appareil.
ATA_FLAGS_48BIT_COMMAND La commande ATA à envoyer utilise le jeu de fonctionnalités d’adresse de bloc logique 48 bits (LBA). Lorsque cet indicateur est défini, le contenu de l'PreviousTaskFile membre de la structure ATA_PASS_THROUGH_EX doit être valide.
ATA_FLAGS_USE_DMA Définissez le mode de transfert sur DMA.
ATA_FLAGS_NO_MULTIPLE Lire le secteur unique uniquement.

PathId

Contient un entier qui indique le port ou le bus IDE de la requête. Cette valeur est définie par le pilote de port.

TargetId

Contient un entier qui indique l’appareil cible sur le bus. Cette valeur est définie par le pilote de port.

Lun

Indique le numéro d’unité logique de l’appareil. Cette valeur est définie par le pilote de port.

ReservedAsUchar

Réservé pour une utilisation ultérieure.

DataTransferLength

Indique la taille, en octets, de la mémoire tampon de données. Si une sous-exécution se produit, le pilote miniport doit mettre à jour ce membre avec le nombre d’octets réellement transférés.

TimeOutValue

Indique le nombre de secondes autorisées pour l’exécution de la requête avant que le pilote de port spécifique au système d’exploitation détermine que la requête a expiré.

ReservedAsUlong

Réservé pour une utilisation ultérieure.

DataBufferOffset

Spécifie le décalage, en octets, du début de cette structure à la mémoire tampon de données.

PreviousTaskFile[8]

Spécifie le contenu des registres d’entrée de fichier de tâche avant la commande directe actuelle. Ce membre n’est pas utilisé lorsque l’indicateur ATA_FLAGS_48BIT_COMMAND n’est pas défini.

CurrentTaskFile[8]

Spécifie le contenu du registre du fichier de tâche à la fois en entrée et en sortie. Lors de l’entrée, les valeurs de tableau dans CurrentTaskFile mappent aux registres d’entrée de fichier de tâche de la manière suivante.

Octet Registre d’entrée
0 Inscription des fonctionnalités
1 Registre des nombres de secteurs
2 Registre des numéros de secteur
3 Registre à faible cylindre
4 Registre de cylindres haut
5 Inscription de l’appareil/de la tête
6 Registre de commandes
7 Réservé
 

Une fois IOCTL_ATA_PASS_THROUGH terminée, le pilote de port met à jour CurrentTaskFile avec les valeurs présentes dans les registres de sortie de l’appareil à l’achèvement de la commande incorporée. Les valeurs de tableau dans CurrentTaskFile correspondent aux registres de sortie de fichier de tâches suivants.

Octet Registre de sortie
0 Inscription d’erreurs
1 Registre des nombres de secteurs
2 Registre des numéros de secteur
3 Registre à faible cylindre
4 Registre de cylindres haut
5 Inscription de l’appareil/de la tête
6 Registre d’état
7 Réservé

Remarques

IOCTL_ATA_PASS_THROUGH est une demande de contrôle d’appareil mis en mémoire tampon. Pour contourner la mise en mémoire tampon dans la mémoire système, les appelants doivent utiliser IOCTL_ATA_PASS_THROUGH_DIRECT et ATA_PASS_THROUGH_DIRECT. Lors de la gestion d’une requête IOCTL_ATA_PASS_THROUGH_DIRECT, le système verrouille la mémoire tampon en mémoire utilisateur et l’appareil accède directement à cette mémoire.

Exigences

Exigence Valeur
d’en-tête ntddscsi.h (include Ntddscsi.h)

Voir aussi

ATA_PASS_THROUGH_DIRECT

IOCTL_ATA_PASS_THROUGH

IOCTL_ATA_PASS_THROUGH_DIRECT