Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 直接在win32api中读取和写入硬盘,如ms dos中的BioDisk或absread_C_Winapi_Filesystems - Fatal编程技术网

C 直接在win32api中读取和写入硬盘,如ms dos中的BioDisk或absread

C 直接在win32api中读取和写入硬盘,如ms dos中的BioDisk或absread,c,winapi,filesystems,C,Winapi,Filesystems,我一直在玩在16位操作系统MS-DOS下运行的C语言(Turbo C)的12位FAT(FAT12)和16位FAT(FAT16)磁盘驱动器 我能够直接操纵部门 FAT32有点复杂,因为这些扇区像链表一样存储,不像其他低于FAT32的FAT 我想读写硬盘,直接使用32位C语言(win32 api)的USB磁盘 我看到它正在使用/device/访问一个磁盘,在biosdisk中,磁盘从0开始编号。我在操纵头部,扇形,圆柱体 请就如何直接逐扇区读写硬盘或如何低电平读写硬盘给出建议 我必须学习汇编语言吗

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

我能够直接操纵部门

FAT32有点复杂,因为这些扇区像链表一样存储,不像其他低于FAT32的FAT

我想读写硬盘,直接使用32位C语言(win32 api)的USB磁盘

我看到它正在使用/device/访问一个磁盘,在biosdisk中,磁盘从0开始编号。我在操纵头部,扇形,圆柱体

请就如何直接逐扇区读写硬盘或如何低电平读写硬盘给出建议

我必须学习汇编语言吗

编辑


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

如果使用WinAPI,则可以使用()API打开原始磁盘设备(请参见此处的物理磁盘和卷部分),然后使用ReadFile()和WriteFile()方法读取和写入数据


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

如果使用WinAPI,则可以使用()API打开原始磁盘设备(请参见此处的物理磁盘和卷部分),然后使用ReadFile()和WriteFile()方法读取和写入数据


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

真正的问题是,为什么要在16位操作系统下使用古老的编译器操作FAT16磁盘。“这纯粹是学术性的”的典型理由在这里并不适用。这几乎完全是浪费时间。另外,从操作系统的角度来看,硬盘并不是什么特别的东西,它只是一个文件。您可以使用相同的API调用打开和读/写硬盘。唯一的问题是,硬盘当然不是一个普通的文件。因此,出于明显的安全原因,您只能以管理员的身份执行此操作。在MS-DOS中不能使用管理员的身份!还有一件好事,因为我认为Turbo C不支持嵌入清单。@Cody Gray:好吧,这个问题被标记为WinAPI,OP明确地说是“Win32 API”,链接到的示例代码是针对Windows NT/2k/XP的。到目前为止,没有MS-DOS,因此没有清单=没有访问权。在Windows 7下,使用文件系统虚拟化技术,您甚至可能需要编写驱动程序,因为很可能您根本无法直接访问磁盘(我不知道为什么任何合法的用户程序都需要直接写入驱动器)。我需要直接操作硬盘的一种情况是,我想编写一个文件来维护自己的FAT,甚至将其隐藏在文件系统中,但将这些扇区标记为已使用。所以它只是对其他用户、操作系统甚至我隐藏一个文件,除了我编写的程序,它只能访问这些文件。这只是一点,其他人只是在玩弄而已。:)真正的问题是,为什么要在16位操作系统下使用古老的编译器操作FAT16磁盘。“这纯粹是学术性的”的典型理由在这里并不适用。这几乎完全是浪费时间。另外,从操作系统的角度来看,硬盘并不是什么特别的东西,它只是一个文件。您可以使用相同的API调用打开和读/写硬盘。唯一的问题是,硬盘当然不是一个普通的文件。因此,出于明显的安全原因,您只能以管理员的身份执行此操作。在MS-DOS中不能使用管理员的身份!还有一件好事,因为我认为Turbo C不支持嵌入清单。@Cody Gray:好吧,这个问题被标记为WinAPI,OP明确地说是“Win32 API”,链接到的示例代码是针对Windows NT/2k/XP的。到目前为止,没有MS-DOS,因此没有清单=没有访问权。在Windows 7下,使用文件系统虚拟化技术,您甚至可能需要编写驱动程序,因为很可能您根本无法直接访问磁盘(我不知道为什么任何合法的用户程序都需要直接写入驱动器)。我需要直接操作硬盘的一种情况是,我想编写一个文件来维护自己的FAT,甚至将其隐藏在文件系统中,但将这些扇区标记为已使用。所以它只是对其他用户、操作系统甚至我隐藏一个文件,除了我编写的程序,它只能访问这些文件。这只是一点,其他人只是在玩弄而已。:)为什么要绕过这些非常合理的限制?那么您将如何做到这一点呢?@DavidHeffernan有很多应用程序和使用场景需要直接访问磁盘或锁定的文件(RawDisk不仅仅允许直接访问磁盘)。如果你知道自己在做什么,那就没有什么敏感的了。在内核模式下,一切都是可能的。此外,我正在考虑一个驱动程序、函数、汇编代码。。。这样,我就可以像使用16位ms dos和硬盘一样进行操作了。:)为什么要绕过这些非常合理的限制?那么您将如何做到这一点呢?@DavidHeffernan有很多应用程序和使用场景需要直接访问磁盘或锁定的文件(RawDisk不仅仅允许直接访问磁盘)。Th