structure ATA_PASS_THROUGH_DIRECT (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 dans le tableau suivant.
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 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 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.
DataBuffer
Pointeur vers la mémoire 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â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 la manière suivante.
Octet | Registre d’entrée |
---|---|
0 | Registre des fonctionnalités |
1 | Registre du nombre de secteurs |
2 | Registre des numéros de secteur |
3 | Registre à faible cylindre |
4 | Cylindre high register |
5 | Inscription 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.
Octet | Registre de sortie |
---|---|
0 | Registre d’erreurs |
1 | Registre du nombre de secteurs |
2 | Registre des numéros de secteur |
3 | Registre à faible cylindre |
4 | Cylindre high register |
5 | Inscription 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 en mémoire utilisateur et l’appareil accède directement à cette mémoire. Pour obtenir un équivalent à deux mémoires tampons de cette demande de contrôle d’appareil, consultez IOCTL_ATA_PASS_THROUGH et ATA_PASS_THROUGH_EX.
Exigences
Exigence | Valeur |
---|---|
d’en-tête | ntddscsi.h (include Ntddscsi.h) |