ATA_PASS_THROUGH_DIRECT结构(ntddscsi.h)
ATA_PASS_THROUGH_DIRECT结构与 IOCTL_ATA_PASS_THROUGH_DIRECT 请求结合使用,以指示端口驱动程序将嵌入式 ATA 命令发送到目标设备。
语法
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;
成员
Length
指定ATA_PASS_THROUGH_DIRECT结构的长度(以字节为单位)。
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_DIRECT结构中的 PreviousTaskFile 成员的内容应有效。 |
ATA_FLAGS_USE_DMA | 将传输模式设置为 DMA。 |
ATA_FLAGS_NO_MULTIPLE | 仅读取单个扇区。 |
PathId
包含一个整数,指示请求的 IDE 端口或总线。 此值由端口驱动程序设置。
TargetId
包含一个整数,指示总线上的目标设备。 此值由端口驱动程序设置。
Lun
指示设备的逻辑单元号。 此值由端口驱动程序设置。
ReservedAsUchar
保留以供将来使用。
DataTransferLength
指示数据缓冲区的大小(以字节为单位)。 如果出现不足,微型端口驱动程序必须将此成员更新为实际传输的字节数。
TimeOutValue
指示请求在特定于 OS 的端口驱动程序确定请求超时之前允许执行的秒数。
ReservedAsUlong
保留以供将来使用。
DataBuffer
指向数据缓冲区的指针。
PreviousTaskFile[8]
指定当前传递命令之前输入任务文件寄存器的内容。 如果未设置ATA_FLAGS_48BIT_COMMAND标志,则不会使用此成员。
CurrentTaskFile[8]
指定在输入和输出上注册任务文件的内容。 在输入时,CurrentTaskFile 中的数组值 以以下方式映射到输入寄存器。
字节 | 输入寄存器 |
---|---|
0 | 功能注册 |
1 | 扇区计数寄存器 |
2 | 扇区编号寄存器 |
3 | 缸低寄存器 |
4 | 缸高寄存器 |
5 | 设备/头寄存器 |
6 | 命令注册 |
7 | 保留 |
IOCTL_ATA_PASS_THROUGH_DIRECT 完成后,端口驱动程序会更新 CurrentTaskFile,并在嵌入命令完成后,设备输出寄存器中存在的值。 currentTaskFile 中的数组值 对应于以下任务文件输出寄存器。
字节 | 输出寄存器 |
---|---|
0 | 错误注册 |
1 | 扇区计数寄存器 |
2 | 扇区编号寄存器 |
3 | 缸低寄存器 |
4 | 缸高寄存器 |
5 | 设备/头寄存器 |
6 | 状态注册 |
7 | 保留 |
言论
ATA_PASS_THROUGH_DIRECT结构与 IOCTL_ATA_PASS_THROUGH_DIRECT一起使用。 使用此请求,系统会锁定用户内存中的缓冲区,并且设备直接访问此内存。 有关此设备控制请求的双缓冲等效项,请参阅 IOCTL_ATA_PASS_THROUGH 和 ATA_PASS_THROUGH_EX。
要求
要求 | 价值 |
---|---|
标头 | ntddscsi.h (包括 Ntddscsi.h) |