我目前正在尝试以 C 语言中的二进制数据流的形式访问物理硬盘。我已经安装了一个映像 (.img),并且可以从操作系统 (Win 7) 中读取它。
我的 C 程序只是尝试以只读二进制模式打开物理驱动器,然后从驱动器读取一些数据。
但是,如果我只是从流中读取数据而不寻找任何地方,那么一切都很好,我会取回存储在驱动器中的数据,并且由于我位于流中的偏移量 0 处,因此我能够读取 MBR在磁盘上。
但是,如果我尝试fseek
到距原点(零)的任何偏移量,fseek
返回-1,表示做不到。
我猜这可能是访问物理磁盘的权限/环 3/用户级问题,我可能必须编写一个驱动程序来获得内核级访问权限才能执行此操作,我只是很困惑为什么我可以从第一个扇区读取一些数据很好,但我无法寻求任何其他偏移量。我已经包含了下面编写的部分 C 程序。
FILE *disk = fopen("\\\\.\\PhysicalDrive1, "rb+");
if (disk == NULL) {
**error handle
}
else { //Opened the drive sucessfully
fread(buffer, 1, 100, disk);
printf("Reading the first byte from buffer, it's:%d\n", buffer[0]);
//This works fine and I can read any byte within the initial buffer
int test = fseek(disk, 100, SEEK_SET);
printf("The value of fseek is:%d\n", test);
//This always returns -1, indicating the seek failed
fclose(disk);
}