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完成后,端口驱动程序使用嵌入命令完成后的设备输出寄存器中存在的值更新 CurrentTaskFileCurrentTaskFile 中的数组值对应于以下任务文件输出寄存器。

Byte 输出寄存器
0 错误寄存器
1 扇区计数寄存器
2 扇区号寄存器
3 柱面低寄存器
4 柱面高寄存器
5 设备/头寄存器
6 状态寄存器
7 预留

注解

IOCTL_ATA_PASS_THROUGH 是缓冲设备控制请求。 若要绕过系统内存中的缓冲,调用方应使用 IOCTL_ATA_PASS_THROUGH_DIRECTATA_PASS_THROUGH_DIRECT。 处理IOCTL_ATA_PASS_THROUGH_DIRECT请求时,系统会锁定用户内存中的缓冲区,设备直接访问此内存。

要求

要求
Header ntddscsi.h (包括 Ntddscsi.h)

另请参阅

ATA_PASS_THROUGH_DIRECT

IOCTL_ATA_PASS_THROUGH

IOCTL_ATA_PASS_THROUGH_DIRECT