开源ext2read代码走读之-MBR中的一个分区表的构成与分区类型值

根据前面的MBR中包含的4个分区表中的一个分区表的信息,对应的结构体为:

struct MBRpartition {

unsigned char boot_ind;         /* 0x80 - active */

unsigned char head;             /* starting head */

unsigned char sector;           /* starting sector */

unsigned char cyl;              /* starting cylinder */

unsigned char sys_ind;          /* What partition type */

unsigned char end_head;         /* end head */

unsigned char end_sector;       /* end sector */

unsigned char end_cyl;          /* end cylinder */

unsigned char start4[4];        /* starting sector counting from 0 */

unsigned char size4[4];         /* nr of sectors in partition */

};

以上的结构中,当boot_ind为0x80的时候,表示此分区是已经进行了初始化的,通俗地讲,也即是进行了分区的建立并进行了

格式化的。

而sys_ind此值表示当前分区的类型,例如:在windows下一般都有Fat16,Fat32,NTFS,ExFat等,而在GNU Linux中有

ext2,ext3,ext4等文件系统,若是扩展分区,那么则为0x05。

分区的类型对应的值为:

switch(type)

{

case  0x06:    return "FAT16";

case  0x07:    return "NTFS";

case  0x0b:    return "FAT32";

case  0x0c:    return "FAT32";

case  0x0f:    return "Extended";

case  0x82:    return "Linux Swap/Solaris";

case  0x83:    return "EXT2fs/EXT3fs";

case  0x8e:    return "Linux LVM";

case  0x00:    return "empty";

case  0x01:    return "DOS 12-bit FAT";

case  0x04:    return "DOS 16-bit FAT";

case  0x05:    return "Extended";

case  0x85:    return "Linux Extended";

case  0xfd:    return "Linux Raid";

case  0x02:    return "XENIX root";

case  0x03:    return "XENIX /usr";

case  0x08:    return "AIX bootable";

case  0x09:    return "AIX data";

case  0x0A:    return "OS/2 Boot Manager";

case  0x10:    return "OPUS";

case  0x11:    return "OS/2 Boot Manager hidden 12-bit FAT";

case  0x12:    return "Compaq Diagnostics";

case  0x14:    return "OS/2 Boot Manager hidden sub-32M 16-bit FAT";

case  0x16:    return "OS/2 Boot Manager hidden over-32M 16-bit FAT";

case  0x17:    return "OS/2 Boot Manager hidden HPFS";

case  0x18:    return "AST special Windows swap";

case  0x24:    return "NEC MS-DOS";

case  0x3C:    return "PowerQuest PartitionMagic recovery partition";

case  0x40:    return "VENIX 80286";

case  0x42:    return "SFS (Secure File System)";

case  0x50:    return "Disk Manager (ro)";

case  0x51:    return "Novell";

case  0x52:    return "Microport System V/386";

case  0x56:    return "GoldenBow VFeature";

case  0x61:    return "SpeedStor";

case  0x63:    return "GNU HURD";

case  0x64:    return "Novell NetWare";

case  0x65:    return "Novell NetWare";

case  0x70:    return "DiskSecure Multi-Boot";

case  0x75:    return "PC/IX";

case  0x80:    return "Minix";

case  0x81:    return "Minix";

case  0x84:    return "OS/2-hidden";

case  0x93:    return "Amoeba";

case  0x94:    return "Amoeba bad";

case  0xA5:    return "FreeBSD";

case  0xB7:    return "BSDI";

case  0xB8:    return "BSDI swap ";

case  0xC1:    return "DR-DOS 6.0 LOGIN.EXE-secured 12-bit FAT";

case  0xC4:    return "DR-DOS 6.0 LOGIN.EXE-secured 16-bit";

case  0xC6:    return "DR-DOS 6.0 LOGIN.EXE-secured Huge";

case  0xC7:    return "Cyrnix Boot";

case  0xDB:    return "CP/M";

case  0xE1:    return "SpeedStor 12-bit FAT extended";

case  0xE4:    return "SpeedStor 16-bit FAT extended";

case  0xF2:    return "DOS 3.3+ secondary";

case  0xF4:    return "SpeedStor";

case  0xFE:    return "LANstep";

case  0xFF:    return "bad";

}

时间: 2024-10-11 02:51:17

开源ext2read代码走读之-MBR中的一个分区表的构成与分区类型值的相关文章

开源ext2read代码走读之-扩展分区与逻辑分区说明及如何读取扩展分区的分区表(EBR)

一个硬盘可以有很多分区,但MBR分区表只有四项,怎么能突破这个限制呢?答案是扩展引导记录(EBR - Extended Boot Record),通过把MBR分区表中一项设为扩展分区(系统ID为0x05或0x0F),其分区表项指定扩展分区的起始位置和长度,在其中最开始扇区 (EBR)和MBR相同位置(0x1BE)放置另外一个分区表,一般称为扩展分区表.扩展分区表的第一项指定扩展分区目前的逻辑分区信息,如果还有更多的 逻辑分区,扩展分区表的第二项指定下一个EBR的位置,否则为0.最后的两个分区表项

开源ext2read代码走读之-如何读取MBR分区的内容

主引导记录(Master Boot Record,缩写:MBR),又叫做主引导扇区,是计算机开机后访问硬盘时所必须要读取的首个扇区,它在硬盘上的三维地址为(柱面,磁头,扇区)=(0,0,1).在深入讨论主引导扇区内部结构的时候,有时也将其开头的446字节内容特指为"主引导记录"(MBR),其后是4个16字节的"磁盘分区表"(DPT),以及2字节的结束标志(55AA).因此,在使用"主引导记录"(MBR)这个术语的时候,需要根据具体情况判断其到底是

开源ext2read代码走读之--“\\\\.\\PhysicalDrive0”意义?

在ext2read中读取ext4文件系统的代码中,读取硬盘中的信息时,定义了以下的宏,那么这个宏是什么意思呢? #define DEVICE    "\\\\.\\PhysicalDrive0"是什么意思? 由于"\"是C/C+中转义符, "\\\\.\\"就相当于\\.\,那么以上的宏定义中的"\\\.\\PhysicalDrive0"就等价于"\\.\PhysicalDrive0" 在Windows中

开源ext2read代码走读之-在windows下如何判断有几个硬盘设备?

int get_ndisks() { HANDLE hDevice;               // handle to the drive to be examined int ndisks = 0; char path[20] = {"\\\\.\\PhysicalDrive0"}; do { //TRACE("NDISKS %s", path); hDevice = CreateFileA(path, // drive to open GENERIC_REA

9行代码体现集合框架中的一个小细节

String[] strs = {"string--01", "string--02", "string--03", "string--04"};List<String> strsList = Arrays.asList(strs);//以下语句输出:[string--01, string--02, string--03, string--04]System.out.println(strsList); int[]

WebRTCDemo.apk代码走读(九):VoiceEngine和VideoEngine主要的控制类说明

转载注明出处http://blog.csdn.net/wanghorse 1. VideoEngineImpl VideoEngine对外提供的集成接口实现类, 其继承了VideoEngine对外提供的所有接口实现类,包括 ViEBaseImpl/ViECaptureImpl/ViEFileImpl/ViEImageProcessImpl/ViENetworkImpl/ViERTP_RTCPImpl/ViEExternalCodecImpl/VideoEngine 2. ViEBaseImpl

Kd-Tree算法原理和开源实现代码

本文介绍一种用于高维空间中的快速最近邻和近似最近邻查找技术——Kd-Tree(Kd树).Kd-Tree,即K-dimensional tree,是一种高维索引树形数据结构,常用于在大规模的高维数据空间进行最近邻查找(Nearest Neighbor)和近似最近邻查找(Approximate Nearest Neighbor),例如图像检索和识别中的高维图像特征向量的K近邻查找与匹配.本文首先介绍Kd-Tree的基本原理,然后对基于BBF的近似查找方法进行介绍,最后给出一些参考文献和开源实现代码.

关于烂代码的那些事(中)

1. 摘要 这是烂代码系列的第二篇,在文章中我会跟大家讨论一下如何尽可能高效和客观的评价代码的优劣. 在发布了关于烂代码的那些事(上)之后,发现这篇文章竟然意外的很受欢迎,很多人也描(tu)述(cao)了各自代码中这样或者那样的问题. 最近部门在组织bootcamp,正好我负责培训代码质量部分,在培训课程中让大家花了不少时间去讨论.改进.完善自己的代码.虽然刚毕业的同学对于代 码质量都很用心,但最终呈现出来的质量仍然没能达到“十分优秀”的程度. 究其原因,主要是不了解好的代码“应该”是什么样的.

值得阅读的C语言开源项目代码

本文地址:http://www.cnblogs.com/archimedes/p/c-opensource-project.html,转载请注明源地址. 本篇文章主要总结一些C开源项目,有些是很著名的,有些则比较生僻 1.Webbench Webbench是一个在linux下使用的非常简单的网站压测工具.它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的性能,最多可以模拟3万个并发连接去测试网站的负载能力.Webbench使用C语言编写, 代码实在太简洁,源码加起来