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 le sens 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 que DRDY status à partir de l’appareil avant d’envoyer la commande à l’appareil. |
ATA_FLAGS_DATA_IN | Lisez 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 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 un seul secteur. |
PathId
Contient un entier qui indique le port IDE ou le bus de la demande. 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 avec le nombre d’octets réellement transférés.
TimeOutValue
Indique le nombre de secondes autorisées pour que la demande s’exécute 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.
DataBufferOffset
Spécifie le décalage, en octets, entre le début de cette structure et la mémoire tampon de données.
PreviousTaskFile[8]
Spécifie le contenu des registres d’entrée de fichier de tâches antérieurs à 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 sur l’entrée et la sortie. En entrée, les valeurs du tableau dans CurrentTaskFile sont mappées au registre d’entrée du fichier de tâches de la manière suivante.
Byte | Registre d’entrée |
---|---|
0 | Inscription des fonctionnalités |
1 | Registre du nombre de secteurs |
2 | Registre des numéros de secteur |
3 | Registre bas du cylindre |
4 | Registre de cylindre élevé |
5 | Registre de l’appareil/de la tête |
6 | Registre des 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 à la fin de la commande incorporée. Les valeurs du tableau dans CurrentTaskFile correspondent aux registres de sortie de fichier de tâches suivants.
Byte | Registre de sortie |
---|---|
0 | Registre d’erreurs |
1 | Registre du nombre de secteurs |
2 | Registre des numéros de secteur |
3 | Registre bas du cylindre |
4 | Registre de cylindre élevé |
5 | Registre 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 mise 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 demande de IOCTL_ATA_PASS_THROUGH_DIRECT, le système verrouille la mémoire tampon dans la mémoire utilisateur et l’appareil accède directement à cette mémoire.
Configuration requise
Condition requise | Valeur |
---|---|
En-tête | ntddscsi.h (inclure Ntddscsi.h) |