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. 阅读未格式化的数据,英特尔ifort vs ibm xlf
- 3. 阅读半格式数据
- 4. 阅读和格式化CSV数据和数组在PHP
- 5. 阅读Python中的格式化多行
- 6. 阅读Java Servlets的格式化文本
- 7. 扩展中断13,阅读未格式化的磁盘
- 8. 阅读TIFF栅格数据
- 9. CSV阅读器programmin格式化
- 10. 如何阅读格式化文本?
- 11. 从java中读取未格式化数据的套接字
- 12. 阅读PDF文件获取结构化格式的表格数据,
- 13. 阅读格式90
- 14. 阅读JSON格式
- 15. 阅读ePub格式
- 16. 用d3.dsv.parseRows读取格式化数据
- 17. 格式化读入CSV数据
- 18. 数据读取器格式化输出
- 19. 阅读格式化的十进制值的文化问题
- 20. 未格式化数据阵列
- 21. 阅读缺少数据的表格
- 22. 优化MySQL阅读模式
- 23. 未格式化读取包含指针
- 24. 不一致的记录标记,同时阅读Fortran未格式化的文件
- 25. 读取XML数据的格式化数据表
- 26. 阅读HITRAN文件格式
- 27. 如何阅读JSON格式
- 28. 文件阅读格式
- 29. 阅读DICOM文件格式
- 30. 阅读某种格式