我有一个大容量存储设备(闪存)通过 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/