FAT32中文版分析+补充(2)
从Offset 36(0x24)开始FAT12/16的内容开始区别于FAT32,现在分两个表格列出来,下表为FAT12/16的内容:
名称 | Offset(Byte) | 大小(Byte) | 描述 |
BS_drvNum | 36(0x24) | 1 | 用于BIOS中断0x13得到磁盘驱动器参数,(0x00为软盘,0x80为硬盘)。 NOTE:此域的值实际上由操作系统来决定。 |
BS_Reserved1(壹) | 37(0x25) | 1 | 保留(供NT使用),格式化FAT卷时必须把此域设置为0。 |
BS_BootSig | 38(0x26) | 1 | 扩展引导标记(0x29),用于指明此后的三个域可用。 |
BS_VolID | 39(0x27) | 4 | 卷标序列号,此域以BS_VolLab一起,可用用来检测磁盘是否正确,FAT文件系统可用用此判断连接的可移动磁盘是否正确,此域往往是由时间和日期组成的一个32位值。 |
BS_VolLab | 43(0x2B) | 11 | 磁盘卷标,此域的值必须与根目录中11字节长的卷标一致。 NOTE:FAT文件系统必须保证在根目录的卷标文件更改或是创建的同时,此域的内容能得到及时的更新,当FAT卷没有卷标时,此域的内容为“NO NAME”。 |
BS_FileSysType | 54(0x36) | 8 | 以下的几种之一:“FAT12”、“FAT16”、“FAT32”。 NOTE:不少人错误认为FAT文件系统的类型由此域来确定,仔细点你就能发现此域并不是BPB的一部分,只是一个字符串而已,Microsoft的操作系统并不使用此域来确定FAT文件的类型,因为它常常被写错,或是根本不存在,后面将讨论如何来检测一个FAT文件系统的类型,但不管如何,建议您在此域填写正确信息,因为一些非Microsoft的操作系统会检测此域。 |
下标为FAT32的内容:
名称 | Offset(Byte) | 大小(Byte) | 描述 |
BPB_FATSz32 | 36(0x24) | 4 | 一个FAT表所占的扇区数,此域为FAT32特有,同时BPB_FATSz16必须为0。 |
BPB_ExtFlags | 40(0x28) | 2 | 此域FAT32特有。 Bits 0~3:不小于0的活动FAT(active FAT)数目,只有在镜像 (mirroring)禁止时才有效。 Bits 4~6:保留; Bits 7:——0 表示FAT实时镜像到所有的FAT表中; ——1 表示只有一个活动的FAT表,这个表就是Bits 0~3 所指定的那个。 Bits 8~15:保留。 |
BPB_FSVer | 42(0x2A) | 2 | 此域FAT32特有。高位为FAT32的主版本号,低位为次版本号,这个版本号是为了以后更高级的FAT版本考虑,假设当前的操作系统所能支持的FAT32版本号为0:0。那么该操作系统检测到此域不为0时,它便会忽略这个FAT卷,因为它的版本号比系统能支持的版本要高。 |
BPB_RootClus | 44(0x2C) | 4 | 此域FAT32特有。根目录所在第一个簇的簇号,通常该数值为2,担不是必须为2。 NOTE:磁盘工具在改变根目录位置时,必须想办法让磁盘上的第一个非坏簇作为根目录的第一个簇(比如第2簇,除非它已经被标记为坏簇),这样的话,如果此域正好为0的话,磁盘检测工具也能很轻松地找到根目录所在簇的位置。 |
BPB_FSInfo | 48(0x30) | 2 | 此域FAT32特有。保留区中FAT32卷FSINFO结构所占的扇区数,通常为1。 NOTE:在Backup Boot中会有一个FSINFO的备份,但该备份只是更新其中的指针,也就是说无论是主引导记录,还是备份引导记录都是指向同一个FSINFO结构。 |
BPB_BkBootSec | 50(0x32) | 2 | 此域FAT32特有。如果不为0,表示在保留区中引导记录的备份数据所占的扇区数,通常为6。同时不建议使用6以外的其他数值。 |
BPB_Reserved | 52(0x34) | 12 | 此域FAT32特有。用于以后的FAT扩展使用,对于FAT32,此域用0填充。 |
BS_DrvNum | 64(0x40) | 1 | 与FAT12/FAT16的定义相同,只不过两者位于启动扇区不同位置而已。 |
BS_Reserved1 | 65(0x41) | 1 | 与FAT12/FAT16的定义相同,只不过两者位于启动扇区不同位置而已。 |
BS_BootSig | 66(0x42) | 1 | 与FAT12/FAT16的定义相同,只不过两者位于启动扇区不同位置而已。 |
BS_VolID | 67(0x43) | 4 | 与FAT12/FAT16的定义相同,只不过两者位于启动扇区不同位置而已。 |
BS_FileSysType | 71(0x47) | 11 | 与FAT12/FAT16的定义相同,只不过两者位于启动扇区不同位置而已。 |
BS_FileSysType | 82(0x52) | 8 | 通常设置为“FAT32”,请参照FAT12/FAT16部分关于此域的陈述,该域的内容和FAT类型的判定无关。 |
关于FAT的启动扇区还有一点重要的说明:我们假设里面的内容是按照字节排序的,那么扇区[510]的内容一定是0x55,扇区[511]的内容一定是0xAA。
NOTE:很多FAT的资料文档会错误地把0xAA55说成是“启动扇区最后两字节的内容”,这样的陈述是正确的,如果,仅仅是如果——BPB_BytesPerSec的值为512的话。若是BPB_BytesPerSec的值大于512,该标记的位置并没有变(虽然在启动扇区的最后两个字节写上0xAA55完全没有问题)。
关于BPB_TotSec16/32这里再作一点补充:假设现在我们有一块磁盘或者一个分区,其扇区数为DskSz,如果BPB_aTotSec(BPB_TotSec16或是BPB_TotSec32其中不为0的那个)的值小于或等于DskSz并不会使该FAT卷在使用中出现什么错误,实际上,BPB_TotSec16/32的值不要比DskSz小得离谱就不会有什么错误。
这样做将造成磁盘空间的浪费,程序本身并不会认为该FAT卷存在什么错误。但是,如果BPB_TotSec16/32的值比DskSz大的话将会使FAT卷遭受严重的损坏。因为它超出了存储介质或是磁盘分区的边界。当BPB_TotSec16/32的值比DskSz大时,一些数据将不幸地被丢失。
FAT32中文版分析+补充(2)的更多相关文章
- FAT32中文版分析+补充(1)
概述 起先所有的FAT文件系统都是为IBM PC机器而设计的,这说明了一个重要的问题:FAT文件系统在磁盘上的数据是用“小端”(Little Endian)结构存储的.我们使用4个8-bit的字节—— ...
- Mybatis源码学习第六天(核心流程分析)之Executor分析(补充)
补充上一章没有讲解的三个Executor执行器; 还是贴一下之前的代码吧;我发现其实有些分析注释还是写在代码里面比较好,方便大家理解,之前是我的疏忽,不好意思 @Override public < ...
- mysql中char与varchar的区别分析(补充一句,int和integer没区别)
转自:http://www.jb51.net/article/23575.htm 在mysql教程中char与varchar的区别呢,都是用来存储字符串的,只是他们的保存方式不一样罢了,char有固定 ...
- css优先级 中文版MDN补充翻译
原文地址:https://developer.mozilla.org/zh-CN/docs/Web/CSS/Specificity css的MDN中文版,这一页是讲css的优先级的. 读到文章的最后, ...
- 《30天自制操作系统》笔记3 --- (Day2 上节)完全解析文件系统
Day2 汇编语言学习与Makefile入门 本文仅带着思路,研究源码里关于文件系统的参数 关于day2主程序部分及更多内容,请看<30天自制操作系统>笔记 导航 发现学习中的变化 源码差 ...
- 虚拟机Vmware成功安装Ubuntu Server 16.04中文版
最近想在Linux下学习Python的爬虫开发技术,经过认真考虑优先选择在在Ubuntu环境下进行学习Python的开发,虽然Ubuntu Server 16.04 LTS版本已经集成了Python ...
- 20169211《Linux内核原理与分析》第五周作业
1.在自己的linux系统中搭建实验环境: 2.使用GDB调试内核跟踪启动过程: 3.分析start_kernel的代码. 1.在自己的linux系统中搭建实验环境 1.1 下载linux-3.18. ...
- <JVM下篇:性能监控与调优篇>补充:浅堆深堆与内存泄露
笔记来源:尚硅谷JVM全套教程,百万播放,全网巅峰(宋红康详解java虚拟机) 同步更新:https://gitee.com/vectorx/NOTE_JVM https://codechina.cs ...
- Linux命令大全完整版
1. linux系统管理命令 adduser 功能说明:新增用户帐号.语 法:adduser补充说明:在Slackware中,adduser指令是个script程序,利用交谈的方式取得输入的用户帐 ...
随机推荐
- netbeans 窗体字体大小设置
当计算机分辨率变大的时候,打开netbeans的时候,字体就会变得越来越小 看起来很不爽,所要就要改变一下,窗体字体大小. 在网上找到了一段修改netbeans窗体字体大小的配置信息,现标记起来,以便 ...
- 使用DOS批处理更改IP地址
有时候电脑在家需要自动获取IP,在公司需要手动填写IP,改来改去很麻烦,于是做一个批处理一键修改很方便: @echo off cls color 0A @echo off echo. echo === ...
- Akka探索第二个例子by fsharp
本文重度借鉴了github上akkabootcamp教程. 先上代码 open Akka open Akka.Actor open System type Message = | ContinuePr ...
- maven课程 项目管理利器-maven 4-1 使用maven创建web项目 5星
本节主要讲了使用maven创建web项目 主要分这三大类: 1 新建maven web项目 2 后续处理普通java项目转web项目需要关注的点 3 maven特色转web需要关注的点 1 新建ma ...
- vue.js ------ 大牛和网站
hellogirl前端网站 : http://www.jqhtml.com/category/article FungLeo: http://blog.csdn.net/FungLeo/article ...
- 冒泡排序,冒泡性能优化--java实现
冒泡排序说明: 一次比较两个元素,如果他们的顺序错误就把他们交换过来. 重复地进行直到没有再需要交换,也就是说已经排序完成. 越小的元素会经由交换慢慢“浮”到数列的顶端. 冒泡排序算法的运作如下: 比 ...
- 【Microsoft Azure学习之旅】消息服务Service Bus的学习笔记及Demo示例
今年项目组做的是Cloud产品,有幸接触到了云计算的知识,也了解并使用了当今流行的云计算平台Amazon AWS与Microsoft Azure.我们的产品最初只部署在AWS平台上,现在产品决定同时支 ...
- Asp.net防御XSS攻击组件库
一.AntiXss 翻看mvc4高级编程,偶看到作者强烈推荐使用AntiXss防御XSS攻击,收集资料看下. 目前类库已融入到.netframework中,类库主页不再更新. 使用方法:使用Nuget ...
- LeeCode 第1题
要求: 给定一个整数(int)数组(Array)和一个目标数值(Target),找出数组中两数之和等于目标值(target)的两个元素的下标位置, 假设:结果唯一,数组中元素不会重复. 本人思路:分别 ...
- python socket实现多个连接
socket实现多个连接 前戏很重要~~ 在实现多个连接之前,先实现下多次发送和接收数据. 如果要多次接收数据,那么在服务器端的接收和客户端的发送部分就必须使用循环. 以下代码在python3.5下运 ...