boot cd_rom struct
资料:
1、introduction_to_iso9660.pdf
2、boot-cdrom.pdf
Normal ISO9600:
offset: 16*2048[0x8000]
The Primary Volume Descriptor
#pragma pack(push,1)
typedef struct _PRIMARY_VOLUME_DESCRIPTOR
{
char VolDesType; //Volume Descriptor Type[1]
char StandardId[]; //Standard Identifier[CD001]
char VolDesVer; //Volume Descriptor Version[1]
char Reserved1; //[0x00]
char SystemId[]; //System Identifier[a-characters allowed18]
char VolumeId[]; //Volume Identifier[d-characters allowed19]
char Reserved2[]; //[0x00]
unsigned long dwVolSpaSizeLow; //Number of logical blocks in the Volume.
unsigned long dwVolSpaSizeHigh;
char Reserved3[]; //[0x00]
unsigned long dwVolSetSize; //The assigned Volume Set size of the Volume.
unsigned long dwVolSeqNum; //The ordinal number of the volume in the Volume Set.
unsigned long dwLogBlockSize; //The size in bytes of a Logical Block.
unsigned long dwPathTabSizeLow; //Length in bytes of the path table.
unsigned long dwPathTabSizeHigh;
unsigned long dwLocTypeLPT;
unsigned long dwLocOptionalTypeLPT;
unsigned long dwLocTypeMPT;
unsigned long dwLocOptionalTypeMPT;
char DirRecTootDir[];
char VolSetId[]; //Volume Set Identifier. d-characters allowed.
char PublisherId[]; //Publisher Identifier. a-characters allowed.
char DataPerId[]; //Data Perparer Identifier. a-characters allowed.
char AppId[]; //Applicatoin Identifier.
char CopyrightFileId[]; //Copyright File Identifier.
char AbbstractFileId[]; //Abstract File Identifier.
char BiblioFileId[]; //Bibliographic File Identifier.
char VolCreaDT[]; //Volume Creation Date and Time.
char VolModifDT[]; //Volume Modification Date and Time.
char VolExpirDT[]; //Volume Expiration Date and Time.
char VolEffecDT[]; //Volume Effective Data and Time.
char FileStrucVer; //File Structure Version[1]
char Reserved4; //Reserved for future standardization.[0x00]
char AppUse[]; //Application Use.
char Reserved5[]; //Reserved for future standardization.[0x00]
}PRIMARY_VOLUME_DESCRIPTOR, *PPRIMARY_VOLUME_DESCRIPTOR;
#pragma pack(pop)
Date and Time:
Represented by seven bytes:
1: Number of years since 1900
2: Month of the year from 1 to 12
3: Day of the Month from 1 to 31
4: Hour of the day from 0 to 23
5: Minute of the hour from 0 to 59
6: second of the minute from 0 to 59
7: Offset from Greenwich Mean Time in Number of
15 minute intervals from -48(West) to +52(East)
boot CD_ROM:
offset: 16*2048[0x8000]
The Primary Volume Descriptor
offset: 17*2048[0x8800]
Boot Record Volume Descriptor
#pragma pack(push,1)
typedef struct _BOOTRECORD_VOLUME_DESCRIPTOR
{
char BootRecordInd; //Boot Record Indicator, must be 0.
char ISO_9660Id[]; //ISO-9660 Identifier, must be "CD001".
char VolVer; //Version of this descriptor, must be 1.
char BootSystemId[]; //Boot System Identifier, must be "EL TORITO SPECIFICATION" padded with 0's.
char Reserved1[]; //Unused, must be 0.
unsigned long dwSecOfBootCatalog; //Absolute pointer to first sector of Boot Catolog.
char Reserved2[]; //Unused, must be 0.
}BOOTRECORD_VOLUME_DESCRIPTOR, *PPBOOTRECORD_VOLUME_DESCRIPTOR;
#pragma pack(pop)
Booting Catalog:
1. Validation Entry
#pragma pack(push,1)
typedef struct _BC_VALIDATION_ENTRY
{
char HeaderID; //Header ID, must be 01.
char PlatformID; //Platform ID. 0=80x86, 1=Power PC, 2=Mac
unsigned short wReserved; //Reserved, must be 0.
char DeveloperID[]; //ID string. to identify the developer of the CD_ROM
unsigned short wChecksum; //Chaecksum Word. This sum of all the words in this record should be 0.
char kb55; //Key byte,must be 0x55
char kbAA; //key byte,must be 0xAA
} BC_VALIDATION_ENTRY, *PBC_VALIDATION_ENTRY;
#pragma pack(pop)
2. Initial.Default Entry
#pragma pack(push,1)
typedef struct _BC_VALIDATION_ENTRY
{
char HeaderID; //Header ID, must be 01.
char PlatformID; //Platform ID. 0=80x86, 1=Power PC, 2=Mac
unsigned short wReserved; //Reserved, must be 0.
char DeveloperID[]; //ID string. to identify the developer of the CD_ROM
unsigned short wChecksum; //Chaecksum Word. This sum of all the words in this record should be 0.
char kb55; //Key byte,must be 0x55
char kbAA; //key byte,must be 0xAA
} BC_VALIDATION_ENTRY, *PBC_VALIDATION_ENTRY;
#pragma pack(pop)
2.1 Boot media type.
This specifies what media the boot image is intended to
emulate in bits 0-3 as follows, bits 4-7 are reserved and must be 0.
Bits 0-3 count as follows:
0 No Emulation
1 1.2 meg diskette
2 1.44 meg diskette
3 2.88 meg diskette
4 Hard Disk (drive 80)
5-F Reserved, invalid at this time
3. Section Header
#pragma pack(push,1)
typedef struct _BC_SECTION_HEADER_ENTRY
{
char HeaderInd; //Header Indicator as follows: 90-Header more headers follow, 91-Final Header
char PlatformID; //Platform ID. 0=80x86, 1=Power PC, 2=Mac
unsigned short wNumber; //Number of section entries following this header
char ID[]; //ID string
} BC_SECTION_HEADER_ENTRY, *PBC_SECTION_HEADER_ENTRY;
#pragma pack(pop)
4. Section Entry
#pragma pack(push,1)
typedef struct _BC_SECTION_ENTRY
{
char BootInd; //Boot Indicator. 88=Bootable, 00=Not Bootable
char BootMediaType; //Boot media type.
unsigned short wLoadSegment; //Load Segment. 0 use 0x7C0, non-zero use the specified segment.
char SystemType; //System Type.
char Reserved1; //Unused, must be 0
unsigned short wSectorCount; //Sector Count.
unsigned long dwLoadRBA; //Load RBA. CD's use Relative/Logical block addressing.
char CriteriaType; //Selection criteria type.
char UniqueCriteria[]; //Vendor unique selection criteria.
} BC_SECTION_ENTRY, *PBC_SECTION_ENTRY;
#pragma pack(pop)
4.1 Boot media type.
This specifies what media the boot image emulates in bits 0-32.
Bits 6 and 7 are specific to the type of system.
Bits 0-3 count as follows
0 No Emulation
1 1.2 meg diskette
2 1.44 meg diskette
3 2.88 meg diskette
4 Hard Disk (drive 80)
5-F Reserved, invalid at this time
bit 4 - Reserved, must be 0
bit 5 - Continuation Entry Follows
bit 6 - Image contains an ATAPI driver
bit 7 - Image contains SCSI drivers
4.2 Selection criteria type.
This defines a vendor unique format for bytes 0D-1F.
The following formats have currently been assigned:
0 - No selection criteria
1- Language and Version Information (IBM)
2-FF - Reserved
5. Section Entry Extension
#pragma pack(push,1)
typedef struct _BC_SECTION_ENTRY_EXT
{
char ExtInd; //Extension Indicator. must be 0x44
char Follow; //Bits 1-4:Unused, 5:1=Extension Record follows, 0=This is final Extension, 6-7:Unused
char UniqueCriteria[]; //Vendow unique selection criteria
} BC_SECTION_ENTRY_EXT, *PBC_SECTION_ENTRY_EXT;
#pragma pack(pop)
boot cd_rom struct的更多相关文章
- Python GIL 多线程机制 (C source code)
最近阅读<Python源码剖析>对进程线程的封装解释: GIL,Global Interpreter Lock,对于python的多线程机制非常重要,其如何实现的?代码中实现如下: 指向一 ...
- Linux时间子系统(四) timekeeping
一.前言 timekeeping模块是一个提供时间服务的基础模块.Linux内核提供各种time line,real time clock,monotonic clock.monotonic raw ...
- 计算机启动boot
原创博文:转载请标明出处:http://www.cnblogs.com/zxouxuewei 零.boot的含义 先问一个问题,"启动"用英语怎么说? 回答是boot.可是,boo ...
- MIT JOS学习笔记01:环境配置、Boot Loader(2016.10.22)
未经许可谢绝以任何形式对本文内容进行转载! 一.环境配置 关于MIT课程中使用的JOS的配置教程网上已经有很多了,在这里就不做介绍,个人使用的是Ubuntu 16.04 + qemu.另注,本文章中贴 ...
- 使用spring boot和thrift、zookeeper建立微服务
Spring cloud适应于云端服务,也适用于企业信息化SOA建设.spring boot也是restful微服务开发的利器.但对于内网服务,即服务与服务之间的调用,spring并没有去刻意封装,也 ...
- android boot.img 结构
android 的boot.img 包括 boot header,kernel, ramdisk 首先来看看Makefile是如何产生我们的boot.img的: boot镜像不是普通意义上的文件系统, ...
- boot.img的分析
1 boot.img boot.img是由文件头信息,内核数据以及文件系统数据组成,它们之间非页面对齐部分用0填充 文件头信息的具体结构可以在system/core/mkbootimg/bootim ...
- 嵌入式系统 Boot Loader 技术内幕
转载:http://www.ibm.com/developerworks/cn/linux/l-btloader/index.html 1. 引言 在专用的嵌入式板子运行 GNU/Linux 系统 ...
- u-boot分析——struct gd_t与struct bd_t
gd_t和bd_t是u-boot中两个重要的数据结构,在初始化操作很多都要靠这两个数据结构来保存或传递.分别定义在./include/asm/global_data.h和./include/asm/u ...
随机推荐
- Android 获取自带浏览器上网记录
先是搜索了一下,在manifest里添加 <uses-permission android:name="com.android.browser.permission.READ_HIST ...
- 训练深度学习网络时候,出现Nan 或者 震荡
出现Nan : 说法1: 说法2:说法3: 震荡 : 分析原因: 1:训练的batch_size太小 1. 当数据量足够大的时候可以适当的减小batch_size,由于数据量太大,内存不够 ...
- django 用户管理系列:1 user
:first-child{margin-top:0!important}.markdown-body>:last-child{margin-bottom:0!important}.markdow ...
- 求最大连续和——dp
输入一组整数,求出这组数字子序列和中最大值.也就是仅仅要求出最大子序列的和,不必求出最大的那个序列. 比如: 序列:-2 11 -4 13 -5 -2,则最大子序列和为20. 序列:-6 2 4 -7 ...
- exe4j打包java应用程序
转载地址:http://blog.csdn.net/fog911811/article/details/6151700 第一.将应用程序导出成一个JAR文件. 1.先打包程序成一个jar.在eclip ...
- eclipse 安装properties编辑器,显示中文
如图添加,地址为: propedit.sourceforge.jp/eclipse/updates/ 选择红框,只安装这个即可 然后一直安装,再接受同意,最后重启eclipse就安装好了 重启后发现文 ...
- WebClient请求帮助类
/// <summary> /// 通过JSON方式发送POST请求 /// 将返回结果按JSON方式解析 /// </summary> public static class ...
- git rm与git rm --cached
当我们需要删除暂存区或分支上的文件, 同时工作区也不需要这个文件了, 可以使用 git rm file_path git commit -m 'delete somefile' git push 当我 ...
- FFmpeg(2)-avformat_open_input()函数详解并示例打开mp4文件
一. 解封装 pts 是显示的时间 dts是解码的时间, 这个时间是用来做同步. av_register_all(), 注册所有的格式.包括解封装格式和加封装格式. avformat_network_ ...
- lua -- 事件响应与局部变量
-- 这里要注意的点是:虽然nAmount是局部变量,却在控件的响应函数中使用 -- 因为控件的响应函数是在该变量的区域内,所以可以用 -- 如果控件的响应函数在外部,那么该变量就要声明成为全局变量 ...