c++ - 使用 C/C++ 访问 RAW 磁盘

标签 c++ c linux windows disk

我有一个大容量存储设备(闪存)通过 PCIe 总线连接到我的计算机上,我想直接访问该设备,即上面没有任何文件系统(例如 NTFS 或 ext4)。

如何使用 C/C++ 执行此操作? (在 Windows 7 和 Linux 上) 我想知道我是否可以 1) 将设备作为文件打开,然后向其读写二进制数据,或者 2) 使用诸如 malloc 之类的函数分配整个设备,然后将每个字节分配给该设备有一个地址,以便我可以根据地址访问它们。

如果可能的话,我更喜欢第二种方式,但我不知道操作系统是否支持这种方式,因为地址空间似乎需要与主内存共享。

最佳答案

根据微软documentation :

在 Windows 上,您可以使用 CreateFile 形式的路径打开物理驱动器

\\.\PhysicalDriveN

其中 N 是设备编号或逻辑驱动器,使用以下形式的路径

\\.\X:

您将需要查找、读取和写入扇区大小的倍数,可以使用带有 IOCTL_DISK_GET_DRIVE_GEOMETRY 的 DeviceIoControl() 检索扇区大小。

关于c++ - 使用 C/C++ 访问 RAW 磁盘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27053534/

相关文章:

c++ - 如何在 C++ 模式下 gsoap 释放内存工作?

c++ - 未定义的 KWallet 引用

c - 将从客户端发送到服务器的数据保存到文件中时包含无效字符

linux - 一个未安装的应用程序怎么可能仍然在 Linux 中运行?

c++ - 如何将参数传递给我在 LLVM 传递中使用 CallInst::Create(...) 调用的外部函数?

c++ - a+(-a) 操作期间溢出

java - 在这些情况下是否可以运行程序(java\c\etc)?

linux - 如何比较 bash 中的两个配对列表?

linux - 无法将文件保存到/var/www/html——即使我在 www-data 组中

c++ - 从二进制数据恢复 MP3 文件