【发布时间】: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