ATA_PASS_THROUGH_EX结构 (ntddscsi.h)
ATA_PASS_THROUGH_EX结构与 IOCTL_ATA_PASS_THROUGH 请求结合使用,以指示端口驱动程序将嵌入式 ATA 命令发送到目标设备。
语法
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;
成员
Length
指定ATA_PASS_THROUGH_EX结构的长度(以字节为单位)。
AtaFlags
指示数据传输方向并指定要执行的操作类型。 此成员的值必须是以下标志的某种组合:
ATA 标志 | 含义 |
---|---|
ATA_FLAGS_DRDY_REQUIRED | 在将命令发送到设备之前,请等待设备的 DRDY 状态。 |
ATA_FLAGS_DATA_IN | 从设备读取数据。 |
ATA_FLAGS_DATA_OUT | 将数据写入设备。 |
ATA_FLAGS_48BIT_COMMAND | 要发送的 ATA 命令使用 48 位逻辑块地址 (LBA) 功能集。 设置此标志后,ATA_PASS_THROUGH_EX 结构中 PreviousTaskFile 成员的内容应有效。 |
ATA_FLAGS_USE_DMA | 将传输模式设置为 DMA。 |
ATA_FLAGS_NO_MULTIPLE | 仅读取单个扇区。 |
PathId
包含一个整数,指示请求的 IDE 端口或总线。 此值由端口驱动程序设置。
TargetId
包含一个整数,指示总线上的目标设备。 此值由端口驱动程序设置。
Lun
指示设备的逻辑单元号。 此值由端口驱动程序设置。
ReservedAsUchar
保留供将来使用。
DataTransferLength
指示数据缓冲区的大小(以字节为单位)。 如果发生不足,微型端口驱动程序必须将此成员更新为实际传输的字节数。
TimeOutValue
指示在特定于 OS 的端口驱动程序确定请求已超时之前允许执行请求的秒数。
ReservedAsUlong
保留供将来使用。
DataBufferOffset
指定从此结构开头到数据缓冲区的偏移量(以字节为单位)。
PreviousTaskFile[8]
指定当前传递命令之前的任务文件输入寄存器的内容。 如果未设置ATA_FLAGS_48BIT_COMMAND标志,则不使用此成员。
CurrentTaskFile[8]
指定输入和输出上的任务文件寄存器的内容。 输入时, CurrentTaskFile 中的数组值按以下方式映射到任务文件输入寄存器。
Byte | 输入寄存器 |
---|---|
0 | 功能寄存器 |
1 | 扇区计数寄存器 |
2 | 扇区号寄存器 |
3 | 柱面低寄存器 |
4 | 柱面高寄存器 |
5 | 设备/头寄存器 |
6 | 命令寄存器 |
7 | 预留 |
IOCTL_ATA_PASS_THROUGH完成后,端口驱动程序使用嵌入命令完成后的设备输出寄存器中存在的值更新 CurrentTaskFile。 CurrentTaskFile 中的数组值对应于以下任务文件输出寄存器。
Byte | 输出寄存器 |
---|---|
0 | 错误寄存器 |
1 | 扇区计数寄存器 |
2 | 扇区号寄存器 |
3 | 柱面低寄存器 |
4 | 柱面高寄存器 |
5 | 设备/头寄存器 |
6 | 状态寄存器 |
7 | 预留 |
注解
IOCTL_ATA_PASS_THROUGH 是缓冲设备控制请求。 若要绕过系统内存中的缓冲,调用方应使用 IOCTL_ATA_PASS_THROUGH_DIRECT 和 ATA_PASS_THROUGH_DIRECT。 处理IOCTL_ATA_PASS_THROUGH_DIRECT请求时,系统会锁定用户内存中的缓冲区,设备直接访问此内存。
要求
要求 | 值 |
---|---|
Header | ntddscsi.h (包括 Ntddscsi.h) |