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 中的数组值按以下方式映射到输入寄存器。

Byte 输入寄存器
0 功能寄存器
1 扇区计数寄存器
2 扇区号寄存器
3 柱面低寄存器
4 柱面高寄存器
5 设备/头寄存器
6 命令寄存器
7 预留
 

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

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

注解

ATA_PASS_THROUGH_DIRECT 结构与 IOCTL_ATA_PASS_THROUGH_DIRECT 一起使用。 通过此请求,系统锁定用户内存中的缓冲区,设备直接访问此内存。 有关此设备控制请求的双缓冲等效项,请参阅 IOCTL_ATA_PASS_THROUGHATA_PASS_THROUGH_EX

要求

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

另请参阅

ATA_PASS_THROUGH_EX

IOCTL_ATA_PASS_THROUGH

IOCTL_ATA_PASS_THROUGH_DIRECT