如何使用LibC / WINAPI将DVD用作二进制blob?

时间:2018-04-28 15:26:28

标签: c winapi libc

我最近在想,每当我使用光盘时,我都会通过将图像刻录到光盘上,或者通过格式化并像USB一样使用光盘来使用光盘。我从来没有将它用作原始存储介质来将字节戳入/读取字节。

我现在很好奇是否可以将DVD用作二进制数据的blob,我可以随意写入比特。

根据我的理解,如果我格式化它,使用C写入DVD是微不足道的,这样我就可以像典型的C或D驱动器那样连接它(我甚至可以将磁盘名称重命名为C或D,如果我想)。

我很好奇我是否可以在不格式化磁盘的情况下做同样的事情,因此它上面的唯一位是我写的那些或默认的位。

总而言之,我希望能够在未格式化的DVD-RW上执行以下操作

  1. 将偏移量中的一堆字节读入内存中的字节池
  2. 在内存字节池的偏移处覆盖一堆字节而不影响磁盘上的其他字节
  3. 如何实现这一目标?

    提前致谢。

1 个答案:

答案 0 :(得分:-1)

在Linux上,您只需打开块设备并进行充分对齐的写入:

您只需使用dvd+rw-format将媒体格式化为DVD + RW一次。这是一个相对简单的过程,因此您可以从该工具的源代码中提取它。

然而,根据内核文档,什么是“充分对齐的写入”在某种程度上取决于解释 - 规范说2 KiB,但有些驱动器需要更多的对齐。此层也没有损耗均衡或扇区重映射,因此良好的结果确实需要您使用磁盘上的数据结构,这反映出该技术在实际中更接近于一次写入而非真正的随机访问。