【问题标题】:reading and writing hard disk directly in win32api like the biosdisk or absread in ms-dos直接在win32api中读写硬盘,如ms-dos中的biosdisk或absread
【发布时间】:2012-01-24 07:20:51
【问题描述】:

我一直在使用在 16 位操作系统 MS-DOS 下运行的 C 语言 (Turbo C) 的 12 位 FAT (FAT12) 和 16 位 FAT(FAT16) 磁盘驱动器。

我能够直接操纵扇区。

FAT32 并不复杂,因为与其他低于 FAT32 的 FAT 不同,扇区像链表一样存储。

我想直接用32位C语言(win32 api)读写硬盘、U盘。

我看到了some code,它正在使用 /device/ 来访问一个磁盘,我认为在 biosdisk 中磁盘的编号从 0 开始。我正在像磁头、扇区、圆柱体一样操作...

请教如何直接逐扇区读写硬盘或如何在低级别读写硬盘。

我必须去学习汇编语言吗?

编辑

我需要直接操作硬盘的一种情况是我想编写一个维护我自己的 FAT 的文件,甚至将它从文件系统中隐藏,但将这些扇区标记为已使用。所以它只是对其他用户、操作系统甚至我隐藏一个文件,除了我编写的只能访问这些文件的程序。这只是一个点,其他点只是在玩。 :)

【问题讨论】:

  • 真正的问题是为什么您要使用古老的编译器在 16 位操作系统下操作 FAT16 磁盘。 “这纯粹是学术性的”的典型理由在这里并不适用。这几乎完全是在浪费时间。
  • 另外,从操作系统的角度来看,硬盘并不是什么特别的东西,它只是一个文件。您可以使用相同的 API 调用打开和读取/写入硬盘。当然,唯一的问题是硬盘不完全是一个普通文件。因此,出于明显的安全原因,您只能以管理员身份执行此操作。
  • 在 MS-DOS 中没有管理员这样的东西!好消息,因为我认为 Turbo C 不支持嵌入清单。
  • @Cody Gray:嗯,问题被标记为 WinAPI,OP 明确表示“Win32 API”,链接到的示例代码适用于 Windows NT/2k/XP。到目前为止,没有 MS-DOS,因此没有清单 = 没有访问权限。在具有文件系统虚拟化功能的 Windows 7 下,您甚至可能必须编写驱动程序,因为您很可能根本无法直接访问磁盘(我不知道为什么任何合法的用户程序都需要直接写入驱动器无论如何)。
  • 我需要直接操作硬盘的一种情况是我想编写一个文件来维护我自己的 FAT,甚至将其隐藏在文件系统中,但将这些扇区标记为已使用。所以它只是对其他用户、操作系统甚至我隐藏一个文件,除了我编写的只能访问这些文件的程序。这只是一个点,其他点只是在玩。 :)

标签: c winapi filesystems


【解决方案1】:

如果您使用 WinAPI,那么您使用 CreateFile() API 打开原始磁盘设备(参见 Physical Disks and Volumes 部分),然后使用 ReadFile() 和 WriteFile() 方法读取并写入数据。

但请注意,即使您是管理员,最新版本的 Windows(Vista、Windows 7)也会限制您的访问。我们的 RawDisk 产品可让您绕过这些限制。 RawDisk 提供免费的非商业许可证。

【讨论】:

  • 为什么要绕过这些非常明智的限制?你怎么能这样做?
  • @DavidHeffernan 有很多应用程序和使用场景需要直接访问磁盘或锁定文件(RawDisk 不仅仅允许直接访问磁盘)。如果您知道自己在做什么,那么那里没有什么敏感的。在内核模式下一切皆有可能。
  • 此外,我正在考虑一个驱动程序、函数、汇编代码......这样我就可以完全按照我在 16 位 ms DOS 和硬盘上所做的工作。 :)
猜你喜欢
  • 2012-05-15
  • 2013-12-08
  • 2018-10-14
  • 1970-01-01
  • 2011-02-11
  • 1970-01-01
  • 2014-04-17
  • 1970-01-01
  • 2012-10-12
相关资源
最近更新 更多