• 通过IOCTL_ATA_PASS_THROUGH访问ATA设备接口


    控制代码功能:像ATA硬盘发送ATA指令。
    IDE/ATA:接口,一个串行,一个并行,一般叫做IDE接口的硬盘和ATA接口的硬盘。
    ATA指令:可以操作ATA硬盘的指令。

     1 typedef struct _ATA_PASS_THROUGH_EX {
     2   USHORT    Length;
     3   USHORT    AtaFlags;
     4   UCHAR     PathId;
     5   UCHAR     TargetId;
     6   UCHAR     Lun;
     7   UCHAR     ReservedAsUchar;
     8   ULONG     DataTransferLength;
     9   ULONG     TimeOutValue;
    10   ULONG     ReservedAsUlong;
    11   ULONG_PTR DataBufferOffset;
    12   UCHAR     PreviousTaskFile[8];
    13   UCHAR     CurrentTaskFile[8];
    14 } *PATA_PASS_THROUGH_EX, ATA_PASS_THROUGH_EX;

    Length:指定ATA_PASS_THROUGH_EX结构的字节长度.
    AtaFlags:指示数据传输的方向并指定要执行的操作类型。

    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:端口驱动程序确定请求超时时间
    ReservedAsUlong; //保留
    DataBufferOffset; //指定从此结构开始到数据缓冲区的偏移量(以字节为单位)。
    PreviousTaskFile[8]; //指定当前传递命令之前的任务文件输入寄存器的内容。未设置ATA_FLAGS_48BIT_COMMAND标志时不使用此成员。
    CurrentTaskFile[8]; //SATA的register

    偏移量 属性
    byte0 Features register
    byte1 Sector count register
    byte2 Sector number register
    byte3 Cylinder low register
    byte4 Cylinder high register
    byte5 Device/head register
    byte6 Command register
    byte7 Reserved

    当ATA_PASS_THROUGH_EX成功返回后:CurrentTaskFile内容为output registers

    偏移量  属性
    byte0 Error register
    byte0 Sector count register
    byte0 Sector number register
    byte0 Cylinder low register
    byte0 Cylinder high register
    byte0 Device/head register
    byte0 Status register
    byte0 Reserved
     
  • 相关阅读:
    EBS R12.2.0启动时报"httpd.pid: Permission denied"错误
    MSSQL 2012 拒绝了对对象 'extended_properties' (数据库 'mssqlsystemresource',架构 'sys')的 SELECT 权限
    EBS R12.2 创建应用层的启动和关闭脚本
    EBS R12.2应用层启动脚本的执行过程
    EBS R12.2应用层关闭脚本的执行过程
    Linux卸载NAS磁盘,报device is busy
    linux上创建PV/VG/LV
    RW-50004 While Running adrunfmw during EBS 12.2 Installation
    .net(C#)中this关键字
    Javascript的this用法及jQuery中$this和$(this)的区别
  • 原文地址:https://www.cnblogs.com/hwli/p/8946479.html
Copyright © 2020-2023  润新知