通过IOCTL_ATA_PASS_THROUGH访问ATA设备接口
控制代码功能:像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设备接口的更多相关文章
- Ionic2学习笔记(9):访问本地设备
作者:Grey 原文地址: http://www.cnblogs.com/greyzeng/p/5559927.html Ionic2提供了访问本地设备的方法,但是需要安装 ...
- Winform混合式开发框架访问Web API接口的处理
在我的混合式开发框架里面,集成了WebAPI的访问,这种访问方式不仅可以实现简便的数据交换,而且可以在多种平台上进行接入,如Winform程序.Web网站.移动端APP等多种接入方式,Web API的 ...
- win10添加打印机--无法访问指定设备,路径或文件。。
win10添加打印机无法访问指定设备,路径或文件..后来发现很多按钮点击多说无法访问指定设备,路径或文件.. 解决添加打印机问题: 在搜索栏中搜索:print (从这里添加) 彻底解决: 添加环境变量 ...
- ubuntu 下root用户无法访问声音设备的解决方案
原因:root用户没有对pulsaudio的访问权限,而且pulsaudio默认是不能在root下自动启动解决办法: 一.修改自动启动:编辑 gedit /etc/default/pulseaudio ...
- Java访问USB设备
最近在用Java访问RDing设备,使用的是Java HID API.使用过程中发现一个问题,由于是嵌入式小白,不知道如何向USB设备发送report.于是想到可以看看自带的软件如何访问USB的.找到 ...
- 基于Oracle OCI的数据访问C语言接口ORADBI .
基于Oracle OCI的数据访问C语言接口ORADBI cheungmine@gmail.com Mar. 22, 2008 ORADBI是我在Oracle OCI(Oracle 调用接口)基础 ...
- ionic访问odoo 11接口
在架设完毕odoo 11的网站之后,第一次面临手机app该如何访问后台网站的问题,是不是模式类似asp.net mvc 那样的模式,或者还存在其他的访问方法,带着这个疑问与困惑,开始的我的研究学习之路 ...
- vs2015使用Apache Cordova用JavaScript来访问本地设备的功能,比如摄像头、加速计
看到下面这张图就代表着我VS2015 跨平台Moblie开发工具安装成功了. 上周安装成功后本想一睹跨平台开发的乐趣,可是一直找不到合适的入口.这周又来捯饬一下结果发现了一个入口.于是来写一个Hell ...
- VREP中的力触觉设备接口(CHAI3D)
力反馈技术是一种新型的人机交互技术,它允许用户借助力反馈设备触碰.操纵计算机生成的虚拟环境中的物体,并感知物体的运动和相应的力反馈信息,实现人机力觉交互.虽然传统的鼠标.键盘.触摸屏等交互手段可以满足 ...
随机推荐
- CPU对指令长度的判断
译码一般包括:指令预取.指令预分析.解码.预取就是从cache或者内存取一系列的字节(大小可以保证至少包含一条指令),并设置一个待分析的位置,预分析从此位置逐字节分析,如果是前缀就设置分析状态(因为前 ...
- Redis开机自启动
1.新建redis文件 vi /etc/init.d/redis 2.修改/tec/init.d/redis文件,要修改Redis安装目录及配置文件路径 EXEC=/usr/local/redis/b ...
- ORACLE提示表名无效
在创建ORACLE数据库时,创建表 提示表名无效 请查看数据库表名是否出现了小写字母或者关键字,如USER
- SQL注入之Sqli-labs系列第二十九关(基于WAF防护的单引号报错注入)
开始挑战第二十九关(Protection with WAF) 0x1查看源码 (1)login.php页面存在防护,只要检测到存在问题就跳转到hacked.php页面(其他信息看备注) 0x2 for ...
- SQL注入之Sqli-labs系列第七篇(基于root权限读写注入)
开始挑战第一关(Error Based- String) 开始之前,先介绍这关需要用到的几个函数,如下图 继续访问我们的地址,输入' “ 一些测试语句发现都没有反应 查看源码,是采用了单引号和双括号 ...
- ecmall 开发一个新模块
要开发新模块,要借鉴原有模块的代码并进行修改. 首先打开目录external/modules 会有一个datacall文件夹,这个文件夹对应的就是一个模块. 复制datacall文件夹,重命名为tes ...
- Notepad++同一窗口显示左右显示两份文档
Notepad++同一窗口显示左右显示两份文档 直接打开一份文档,test1.txt 再打开第二份文档,test2.txt,会显示成这样: 两份文档是以标签的形式展示的,有时需要同时查看两份文档, ...
- spring boot项目,application.properties配置文件下中文乱码解决方案
转自:https://blog.csdn.net/qq_40408534/article/details/79831807 如以上,application.properties文件下中文乱码.发生乱码 ...
- 后门技术(HOOK篇)之DT_RPATH
0x01 GNU ld.so动态库搜索路径 参考材料:https://en.wikipedia.org/wiki/Rpath 下面介绍GNU ld.so加载动态库的先后顺序: LD_PRELOAD环境 ...
- Java中的内部类————以及jdk1.8的lambda表达式
一.内部类学习导图 1>.静态内部类: 使用static修饰符来修饰内部类,则这个内部类就属于外部类本身,而不属于外部类的某个对象.因此使用static修饰的内部类被称为静态内部类. publi ...