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_THROUGHATA_PASS_THROUGH_EX

要求

要求 价值
标头 ntddscsi.h (包括 Ntddscsi.h)

另请参阅

ATA_PASS_THROUGH_EX

IOCTL_ATA_PASS_THROUGH

IOCTL_ATA_PASS_THROUGH_DIRECT