Partager via


ATA_PASS_THROUGH_DIRECT structure (ntddscsi.h)

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

Syntaxe

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;

Membres

Length

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

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 du tableau suivant.

Indicateurs ATA Signification
ATA_FLAGS_DRDY_REQUIRED Attendez que DRDY status à partir 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 Écrire des données sur l’appareil.
ATA_FLAGS_48BIT_COMMAND La commande ATA à envoyer utilise l’ensemble de fonctionnalités d’adresse de bloc logique (LBA) 48 bits. Lorsque cet indicateur est défini, le contenu du membre PreviousTaskFile dans la structure ATA_PASS_THROUGH_DIRECT doit être valide.
ATA_FLAGS_USE_DMA Définissez le mode de transfert sur DMA.
ATA_FLAGS_NO_MULTIPLE Lire un seul secteur.

PathId

Contient un entier qui indique le port ou le bus de l’IDE pour 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 un usage futur.

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 en fonction du 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 un usage futur.

DataBuffer

Pointeur vers le tampon de données.

PreviousTaskFile[8]

Spécifie le contenu du registre du fichier de tâche d’entrée 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âches à la fois sur l’entrée et la sortie. Lors de l’entrée, les valeurs de tableau dans CurrentTaskFile sont mappées aux registres d’entrée de la manière suivante.

Byte Registre d’entrée
0 Registre des fonctionnalités
1 Registre du nombre de secteurs
2 Registre du numéro de secteur
3 Registre de cylindres bas
4 Cylindres à registre élevé
5 Registre de l’appareil/de la tête
6 Registre de commandes
7 Réservé
 

Une fois IOCTL_ATA_PASS_THROUGH_DIRECT 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.

Byte Registre de sortie
0 Registre des erreurs
1 Registre du nombre de secteurs
2 Registre du numéro de secteur
3 Registre de cylindres bas
4 Cylindres à registre élevé
5 Registre de l’appareil/de la tête
6 Registre d’état
7 Réservé

Remarques

La structure ATA_PASS_THROUGH_DIRECT est utilisée avec IOCTL_ATA_PASS_THROUGH_DIRECT. Avec cette requête, le système verrouille la mémoire tampon dans la mémoire utilisateur et l’appareil accède directement à cette mémoire. Pour obtenir un équivalent à double mise en mémoire tampon de cette demande de contrôle d’appareil, consultez IOCTL_ATA_PASS_THROUGH et ATA_PASS_THROUGH_EX.

Configuration requise

Condition requise Valeur
En-tête ntddscsi.h (inclure Ntddscsi.h)

Voir aussi

ATA_PASS_THROUGH_EX

IOCTL_ATA_PASS_THROUGH

IOCTL_ATA_PASS_THROUGH_DIRECT