2
A
回答
4
我会去与
HANDLE drive = CreateFile(_T("\\.\PhysicalDrive0"), GENERIC_READ, FILE_SHARE_WRITE, 0, OPEN_EXISTING, 0, 0);
// error handling
DWORD br = 0;
DISK_GEOMETRY dg;
DeviceIOControl(drive, IOCTL_DISK_GET_DRIVE_GEOMETRY, 0, 0, &dg, sizeof(dg), &br, 0);
//
LARGE_INTEGER pos;
pos.QuadPart = static_cast<LONGLONG>(sectorToRead) * dg.BytesPerSector;
SetFilePointerEx(drive, pos, 0, FILE_BEGIN);
const bool success = ReadFile(drive, sectorData, dg.BytesPerSector, &br) && br == dg.BytesPerSector;
//
CloseHandle(drive);
请注意,以验证您已经成功地读取扇区您必须验证读取的字节数对应的字节数,你想读,即根据我的经验,即使没有读取字节(或者我只是有一个错误的驱动程序),物理磁盘上的ReadFile()也会返回TRUE。
仍然存在的问题是确定您的驱动器号(在我的示例中使用0代表C:这可能不是您想要的)。我不知道该怎么做,但是如果你只有一个没有格式化的驱动器,应该可以按顺序打开每个PhysicalDrive,并用IOCTL_DISK_GET_DRIVE_LAYOUT_EX
作为命令调用DeviceIOControl():
DRIVE_LAYOUT_INFORMATION_EX dl;
DeviceIOControl(drive, IOCTL_DISK_GET_DRIVE_LAYOUT_EX, 0, 0, &dl, sizeof(dl), &br, 0);
if(dl.PartitionStyle == PARTITION_STYLE_RAW)
{
// found correct disk
}
但这只是一个猜测。
1
必须用CreateFile打开设备文件,然后使用ReadFile/readFileEx。不要忘了与CloseHandle
1
CreateFile function reference on MSDN
滚动关闭文件到“物理磁盘和卷” - 注意,Vista的安全性限制,没有一个文件系统不申请voulmes,所以你会被罚款即使在Vista下,您所提供的条件也是如此。
相关问题
- 1. 阅读和格式化访问数据
- 2. 阅读半格式数据
- 3. 扩展中断13,阅读未格式化的磁盘
- 4. 从java中读取未格式化数据的套接字
- 5. 阅读PDF文件获取结构化格式的表格数据,
- 6. 数据读取器格式化输出
- 7. 阅读格式化的十进制值的文化问题
- 8. 未格式化数据阵列
- 9. 优化MySQL阅读模式
- 10. 未格式化读取包含指针
- 11. 不一致的记录标记,同时阅读Fortran未格式化的文件
- 12. 读取XML数据的格式化数据表
- 13. 以html格式阅读excel
- 14. 阅读格式从文件
- 15. 阅读DICOM文件格式
- 16. 阅读MathType MTEF格式
- 17. 如何阅读JSON格式
- 18. 使用Spark阅读欧洲格式的.csv数据
- 19. Java的阅读器DIF [数据交换格式]
- 20. jQuery如何阅读和格式化数据使用Ajax自动完成
- 21. C#阅读txt文件和数据存储在格式化阵列
- 22. 如何将未格式化的数据导入数据库?
- 23. 阅读HTML表格数据/ html标签
- 24. 阅读Excell数据(单元格)
- 25. 阅读Excel文件格式为未行/ coloumn方式在asp.net 3.5
- 26. ASP ListView - Eval()格式化的数字,绑定()为未格式化?
- 27. 任何方式来格式化代码中的大数字,以便于阅读?
- 28. 未格式化/格式化输入
- 29. 阅读未知行数
- 30. 阅读文本文件作为所需数据帧格式