Xbox DVD Filesystem Details
written by Andrew de Quincey, 5 May 2002
XDVDFS v0.2
Andrew de Quincey (adq@tardis.ed.ac.uk)
This document describes the filing system present on XBOX game DVD disks.
On a CD or DVD disk, sectors are 2048 bytes long.
Xbox media also appear to have regular 8MB spaces reserved for “security placeholders”. It is hypothesised that these are where Microsoft will place digital signatures for each data area on the disk, thus guaranteeing security from corruption or tampering.
It appears that the TOC of game DVDs has also been modified so that disks appear to contain much less data than they actually do (preventing casual copying of game data). It is assumed modified firmware in the Xbox DVD drive deals with this.
The disk image size should be rounded up to the nearest 0x10000 bytes, and padded with 0x00.
VOLUME DESCRIPTOR
This is present at sector 32 of an XBOX medium.
(Offsets are from start of sector)
Offset | Size | Description |
0x000 | 0x14 | “MICROSOFT*XBOX*MEDIA” |
0x014 | 4 | Sector that root directory table resides in |
0x018 | 4 | Size of root directory table in bytes |
0x01c | 8 | FILETIME structure representing image creation time (as in FAT-style date/ FAT-style time). |
0x024 | 0x7c8 | Unused (?) (set to 0) |
0x7ec | 0x14 | “MICROSOFT*XBOX*MEDIA” |
- If the root directory is empty, the sector and size will both be set to 0.
DIRECTORY TABLE
This consists of multiple DIRECTORY ENTRIES.
Any empty space is filled with 0xff.
The table may span multiple contiguous sectors.
DIRECTORY ENTRY
Directory entries within a singledirectory are stored as a binary tree data structure, to decrease search time. Each entry has a left and a right pointer, pointing to the left and right sub-trees descendant from the current entry. Entries alphabetically less than the current entry should be stored in the left sub-tree, while entries alphabetically greater should be stored in the right sub-tree.
The root of this tree for any particular directory is the directory entry situated at offset 0 of the first sector of the directory table.
(Offsets from start of directory entry)
Offset | Size | Description |
0x0000 | 2 | Offset to left sub-tree entry in DWORDs. If this is set to 0, there are no entries in this sub-tree. |
0x0002 | 2 | Offset to right sub-tree entry in DWORDs. If this is set to 0, there are no entries in this sub-tree. |
0x0004 | 4 | Starting sector of file. Each file may consist of multiple contiguous sectors. |
0x0008 | 4 | Total file size. |
0x000C | 1 | File attributes (mostly standard FAT attributes):
|
0x000D | 1 | Length of filename |
0x000E | <filename length> | Filename. Characters are single-byte, probably using standard FAT character map. |
0x000E + <filename length> | <0-3> | Padding to next DWORD (filled with 0xFF). |
- If a sub-directory is empty, the sector and file size of its entry in its parent will both be set to 0.