控制代码功能:像ATA硬盘发送ATA指令。
IDE/ATA:接口,一个串行,一个并行,一般叫做IDE接口的硬盘和ATA接口的硬盘。
ATA指令:可以操作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[];
UCHAR CurrentTaskFile[];
} *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
 

通过IOCTL_ATA_PASS_THROUGH访问ATA设备接口的更多相关文章

  1. Ionic2学习笔记(9):访问本地设备

    作者:Grey 原文地址: http://www.cnblogs.com/greyzeng/p/5559927.html               Ionic2提供了访问本地设备的方法,但是需要安装 ...

  2. Winform混合式开发框架访问Web API接口的处理

    在我的混合式开发框架里面,集成了WebAPI的访问,这种访问方式不仅可以实现简便的数据交换,而且可以在多种平台上进行接入,如Winform程序.Web网站.移动端APP等多种接入方式,Web API的 ...

  3. win10添加打印机--无法访问指定设备,路径或文件。。

    win10添加打印机无法访问指定设备,路径或文件..后来发现很多按钮点击多说无法访问指定设备,路径或文件.. 解决添加打印机问题: 在搜索栏中搜索:print (从这里添加) 彻底解决: 添加环境变量 ...

  4. ubuntu 下root用户无法访问声音设备的解决方案

    原因:root用户没有对pulsaudio的访问权限,而且pulsaudio默认是不能在root下自动启动解决办法: 一.修改自动启动:编辑 gedit /etc/default/pulseaudio ...

  5. Java访问USB设备

    最近在用Java访问RDing设备,使用的是Java HID API.使用过程中发现一个问题,由于是嵌入式小白,不知道如何向USB设备发送report.于是想到可以看看自带的软件如何访问USB的.找到 ...

  6. 基于Oracle OCI的数据访问C语言接口ORADBI .

    基于Oracle OCI的数据访问C语言接口ORADBI cheungmine@gmail.com Mar. 22, 2008   ORADBI是我在Oracle OCI(Oracle 调用接口)基础 ...

  7. ionic访问odoo 11接口

    在架设完毕odoo 11的网站之后,第一次面临手机app该如何访问后台网站的问题,是不是模式类似asp.net mvc 那样的模式,或者还存在其他的访问方法,带着这个疑问与困惑,开始的我的研究学习之路 ...

  8. vs2015使用Apache Cordova用JavaScript来访问本地设备的功能,比如摄像头、加速计

    看到下面这张图就代表着我VS2015 跨平台Moblie开发工具安装成功了. 上周安装成功后本想一睹跨平台开发的乐趣,可是一直找不到合适的入口.这周又来捯饬一下结果发现了一个入口.于是来写一个Hell ...

  9. VREP中的力触觉设备接口(CHAI3D)

    力反馈技术是一种新型的人机交互技术,它允许用户借助力反馈设备触碰.操纵计算机生成的虚拟环境中的物体,并感知物体的运动和相应的力反馈信息,实现人机力觉交互.虽然传统的鼠标.键盘.触摸屏等交互手段可以满足 ...

随机推荐

  1. CPU对指令长度的判断

    译码一般包括:指令预取.指令预分析.解码.预取就是从cache或者内存取一系列的字节(大小可以保证至少包含一条指令),并设置一个待分析的位置,预分析从此位置逐字节分析,如果是前缀就设置分析状态(因为前 ...

  2. Redis开机自启动

    1.新建redis文件 vi /etc/init.d/redis 2.修改/tec/init.d/redis文件,要修改Redis安装目录及配置文件路径 EXEC=/usr/local/redis/b ...

  3. ORACLE提示表名无效

    在创建ORACLE数据库时,创建表 提示表名无效 请查看数据库表名是否出现了小写字母或者关键字,如USER

  4. SQL注入之Sqli-labs系列第二十九关(基于WAF防护的单引号报错注入)

    开始挑战第二十九关(Protection with WAF) 0x1查看源码 (1)login.php页面存在防护,只要检测到存在问题就跳转到hacked.php页面(其他信息看备注) 0x2 for ...

  5. SQL注入之Sqli-labs系列第七篇(基于root权限读写注入)

    开始挑战第一关(Error Based- String) 开始之前,先介绍这关需要用到的几个函数,如下图 继续访问我们的地址,输入' “ 一些测试语句发现都没有反应 查看源码,是采用了单引号和双括号 ...

  6. ecmall 开发一个新模块

    要开发新模块,要借鉴原有模块的代码并进行修改. 首先打开目录external/modules 会有一个datacall文件夹,这个文件夹对应的就是一个模块. 复制datacall文件夹,重命名为tes ...

  7. Notepad++同一窗口显示左右显示两份文档

    Notepad++同一窗口显示左右显示两份文档   直接打开一份文档,test1.txt 再打开第二份文档,test2.txt,会显示成这样: 两份文档是以标签的形式展示的,有时需要同时查看两份文档, ...

  8. spring boot项目,application.properties配置文件下中文乱码解决方案

    转自:https://blog.csdn.net/qq_40408534/article/details/79831807 如以上,application.properties文件下中文乱码.发生乱码 ...

  9. 后门技术(HOOK篇)之DT_RPATH

    0x01 GNU ld.so动态库搜索路径 参考材料:https://en.wikipedia.org/wiki/Rpath 下面介绍GNU ld.so加载动态库的先后顺序: LD_PRELOAD环境 ...

  10. Java中的内部类————以及jdk1.8的lambda表达式

    一.内部类学习导图 1>.静态内部类: 使用static修饰符来修饰内部类,则这个内部类就属于外部类本身,而不属于外部类的某个对象.因此使用static修饰的内部类被称为静态内部类. publi ...