如何使用ATA命令通过DeviceIocontrol Funtion读取大磁盘(例如1,2 TB)
How to read a large disk(like 1 ,2 TB) using ATA commands through DeviceIoControl funtion?
我想使用ATA命令来读取大容量磁盘,该命令通过deviceiocontrol()发送。使用ATA_PASS_THROUGH_EX
结构发送命令是主要问题。实际上CurrentTaskFile[]
UCHAR
类型的ARARY无法发送一个不大于16777215的扇区。
CurrentTaskFile[2] = 0xFF;
CurrentTaskFile[3] = 0xFF;
CurrentTaskFile[4] = 0xFF;
那是
CurrentTaskFile[2] = 0xFF
是部门编号寄存器,
CurrentTaskFile[3] = 0xFF
是气缸低寄存器,
CurrentTaskFile[3] = 0xFF
是气缸高寄存器。
现在,如果我想阅读不超过16777215(如果我想阅读1 TB磁盘的最后一个扇区)该怎么办。如何发送扇区不超过1677215。实际上,我必须阅读磁盘的容量最高4 tb。
还有 CurrentTaskFile[5]
是设备/头寄存器。它的范围取决于磁盘容量,例如,对于4TB磁盘,它是从0
到127
。因此,该磁盘的最大可寻址扇区数为256*256*256*128 == 2147483648
,似乎足够了。
相关文章:
- 子目录是否继承属性,例如add_definitions,include_directories和父Cmakelist.t
- 标准是否使用多余的大括号(例如 T{{{10}}})定义列表初始化?
- 将数字转换为字母(例如:123 转换为一二三)
- Visual studio代码重构似乎不起作用(例如,重命名符号-f2)
- 如何计算数据类型的范围,例如int
- 如何将二进制格式的 C++ 对象的 std::vector 保存到磁盘?
- 这是否符合C++标准:双响双响,例如!!(-0.0).
- 如何将CMSampleBufferRef/CIImage/UIImage转换为像素,例如uint8_t[]
- 使用 make 编译 MPI,几个命名空间错误,例如"错误:未知类型名称'使用'?
- 根据 GetLastError 直接写入磁盘会导致错误代码 5
- 如何使用文件中的文本,例如变量
- 输入值后,如何在一个括号下显示值,例如"{6,7,8,9}
- 给定一个类型,如何派生一个泛型更广泛的类型(例如,用于溢出安全求和)?
- 初学者问题:如何使用这些晦涩难懂的命令,例如C++中的'RenderWindow'
- 矢量和其他容器如何在磁盘上工作?
- C++:将值 int(例如:0x00AAFAD8)转换为指针(指针本身也是 0x00AAFAD8 值)
- 具有多种约束(例如重量、体积等)的背包
- 如何从整个磁盘中排除要装载的一个文件
- 较高值 n 的分割错误(例如 n=999997)
- 如何使用ATA命令通过DeviceIocontrol Funtion读取大磁盘(例如1,2 TB)