Click here to Skip to main content
6,291,124 members and growing! (16,243 online)
Email Password   helpLost your password?
Web Development » Applications & Tools » Tools with source code     Intermediate

Extracting the boot image from a CD/DVD (El Torito)

By Jochen Kalmbach [MVP VC++]

This article explains a simple way to extract the boot-image from a CD/DVD (El Torito). It just uses CreateFile and ReadFile... no mystery about APSI-programming.
VC7.1.NET 1.1, WinXPVS.NET2003, Dev
Posted:4 Aug 2005
Updated:23 Jan 2006
Views:85,728
Bookmarked:52 times
Announcements
Loading...
 
Search    
Advanced Search
printPrint   Broken Article?Report       add Share
  Discuss Discuss   Recommend Article Email
18 votes for this article.
Popularity: 5.71 Rating: 4.55 out of 5

1

2
1 vote, 5.6%
3
3 votes, 16.7%
4
14 votes, 77.8%
5

Introduction

If you need to extract a boot-image from a CD/DVD (El Torito) you can simply use this program. It only uses Win32-calls like CreateFile and ReadFile. There is no usage of ASPI-interface or other native stuff.

Background

To access the raw CD/DVD image, you can simply use the CreateFile API and specify the drive-letter as filename. This opens the drive with access to the sectors. Now, you can read the native image and also extract the boot-image if you read the "El Torito" Bootable CD-ROM Format Specification.

Using the application

The usage of the program is simple. You only need to pass the drive-letter of the CD-ROM/DVD to the program. Alternatively, you can pass a filename to an ISO-image. Here is an example of the usage, if your CD-ROM/DVD-drive is F: then:

BootExtract f:

This will store the boot-image in the current directory with the name Drive-f.NoEmulation__Segment-0000__SecCount-4.bin. The filename always contains the following elements (which can be used to write this boot-image with a burning-program like Nero):

  • Drive-f: Specifies either the drive-letter of the CD/DVD-ROM or the ISO-filename.
  • NoEmulation: The mode which is used by this boot-image. The possible modes are:
    • NoEmulation
    • 1.2MegDisk
    • 1.44MegDisk
    • 2.88MegDisk
  • Segment-xxxx: The segment which will be stored in the initial-entry for this boot-image (normally 0000 or 7C00).
  • SecCount-y: The number of virtual sectors (512 bytes) used for this boot-image.

The complete usage-description is here:

CD/DVD-BootImage-Extractor v1.0 (c) Jochen Kalmbach
http://blog.kalmbachnet.de/

Usage:
  BootExtract [switches] <source>

  source: The source file (*.iso) or CD/DVD-drive to extract images from

  switches: -b   Also extract bootrecord and bootcatalog

Examples:
  BootExtract z:

Points of interest

Location of the boot-image

If you have sector-access to the CD/DVD, you can simple follow the "El Torito" Bootable CD-ROM Format Specification to read the boot-image. The following defines need to be known (which are stated in the spec):

  • CD-sector-size: 0x800 bytes.
  • Virtual-sector-size: 0x200 bytes.
  • Sector-number of the boot-record-volume: 0x11.

Now, you can read the initial/default boot-image if you do the following:

  1. Read the boot-record-volume (sector 0x11) and check for validity.
  2. Extract the sector-number from the boot-record-volume which contains the boot-catalog (DWORD at byte-offset 0x47).
  3. Read the boot-catalog (from the above extracted sector number) and check for validity.
  4. Extract the boot-information from the Initial/Default-Entry in the boot-catalog (starting at byte-offset 0x20 in the boot-catalog).
  5. Extract the starting-sector (DWORD relative byte-offset 0x8) and the virtual-sector-count (WORD at relative byte-offset 0x6) for the boot-image from this entry and read the boot-image.

For a detailed info, you can either read the "El Torito" Bootable CD-ROM Format Specification or take a look at the source code.

History

  • 2005-08-04
    • First public release.
  • 2006-01-05
    • Fixed a bug, now it is able to correctly read 1.2/1.44 and 2.88 MB boot images.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here

About the Author

Jochen Kalmbach [MVP VC++]


Member
1982: My first computer (VC20)
1984: Finished to build my first own computer (Z80)
1993: Mission-Volunteer in Papua New Guinea
1998: Dipl. Inform. (FH)
... working, working, working....
Occupation: Software Developer (Senior)
Location: Germany Germany

Other popular Applications & Tools articles:

Article Top
You must Sign In to use this message board.
FAQ FAQ 
 
Noise Tolerance  Layout  Per page   
 Msgs 1 to 9 of 9 (Total in Forum: 9) (Refresh)FirstPrevNext
GeneralAdd additional download options Pinmemberstupid7778:10 10 Jun '09  
GeneralThanks Pinmembercodewirt8:31 3 Jan '09  
GeneralBlock size on a CD/DVD Pinmembertselly4:59 28 Nov '07  
Generalboot image Pinmembermcharman19:19 6 Sep '07  
Questionextracting fine but burnd cd's doesn't boot Pinmembersuanix13:35 4 Jan '06  
AnswerRe: extracting fine but burnd cd's doesn't boot PinmemberJochen Kalmbach [MVP VC++]21:24 4 Jan '06  
GeneralRe: extracting fine but burnd cd's doesn't boot Pinmembersuanix5:48 5 Jan '06  
GeneralRe: extracting fine but burnd cd's doesn't boot PinmemberJochen Kalmbach [MVP VC++]6:11 5 Jan '06  
GeneralRe: extracting fine but burnd cd's doesn't boot PinmemberJochen Kalmbach [MVP VC++]6:43 5 Jan '06  

General General    News News    Question Question    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

PermaLink | Privacy | Terms of Use
Last Updated: 23 Jan 2006
Editor: Rinish Biju
Copyright 2005 by Jochen Kalmbach [MVP VC++]
Everything else Copyright © CodeProject, 1999-2009
Web16 | Advertise on the Code Project