Pointers
MFT field mft_hVPB contains the offset within the VPB segment of the associated VPB.
DPB field dpb_hVPB contains the offset within the VPB segment of the associated VPB.
CDS field cdi_hVPB contains the offset within the VPB segment of the associated VPB.
GDT_VPB locates the GDT descriptor for the VPB segment.
vpb
┌────────────────┬──────┬──────┬────┬────────────────────────────────────────┐│Field Name │Offset│Length│Type│Description │ ├────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │vpb_flink │0 │2 │W │handle of forward link │ ├────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │vpb_blink │2 │2 │W │handle of back link │ ├────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │vpb_ref_count │4 │2 │W │count of objects that point to VPB │ ├────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │vpb_search_count│6 │2 │W │count of searches that point to VPB │ ├────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │vpb_first_access│8 │1 │B │initialized to -1 to force a media │ ├────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │vpb_signature │9 │2 │W │Signature specifying VPB validity │ ├────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │vpb_flags │B │1 │B │flags (bits 7,6,3-0 defined below) │ ├────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │vpb_fMisc │C │1 │B │More flags (bit 7 defined below) │ ├────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │vpb_FSC │D │4 │D │Pointer to the file system control block│ │ │ │ │ │(FSC). │ ├────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │vpb_fsd │11 │40 │S │File system dependent section │ ├────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │vpb_fsi │51 │2C │S │File system independent section │ └────────────────┴──────┴──────┴────┴────────────────────────────────────────┘
vpb_signature values
┌───────────┬────────┬───────────┐ │Name │Bit Mask│Description│ ├───────────┼────────┼───────────┤ │VPB_VALID │0x444A │ │ ├───────────┼────────┼───────────┤ │VPB_INVALID│0x4A47 │ │ └───────────┴────────┴───────────┘
vpb_ID values
┌───────────────┬────────┬────────────────────────────────────────┐ │Name │Bit Mask│Description │ ├───────────────┼────────┼────────────────────────────────────────┤ │UNREAD_ID1 │0x4A52 │Media unreadable │ ├───────────────┼────────┼────────────────────────────────────────┤ │UNREAD_ID2 │0x534E │Media unreadable │ ├───────────────┼────────┼────────────────────────────────────────┤ │DAMAGED_ID1 │0x0000 │Media damaged but recognised by IFS │ ├───────────────┼────────┼────────────────────────────────────────┤ │DAMAGED_ID2 │0x0000 │Media damaged but recognised by IFS │ └───────────────┴────────┴────────────────────────────────────────┘
vpb_falgs flag definitions
┌──────────────┬────────┬────────────────────────────────────────┐ │Name │Bit Mask│Description │ ├──────────────┼────────┼────────────────────────────────────────┤ │VPBCHECK │0x01 │a volume ID check is going on for this │ │ │ │VPB │ ├──────────────┼────────┼────────────────────────────────────────┤ │VPBNEWBOOT │0x02 │new format disk │ ├──────────────┼────────┼────────────────────────────────────────┤ │VPBMOUNT │0x04 │Mount in progress │ ├──────────────┼────────┼────────────────────────────────────────┤ │VPBFORMATMOUNT│0x08 │FormatMount done, not cleared │ ├──────────────┼────────┼────────────────────────────────────────┤ │VPBINVALID │0x10 │volume formatted - old vpb invalid │ ├──────────────┼────────┼────────────────────────────────────────┤ │VPBINITCACHE │0x20 │Initializing Cache Data │ ├──────────────┼────────┼────────────────────────────────────────┤ │VPBSETVID │0x40 │vid set is in progress │ ├──────────────┼────────┼────────────────────────────────────────┤ │VPBALLOCATE │0x80 │cluster allocation in progress │ └──────────────┴────────┴────────────────────────────────────────┘
vpb_fMisc flag definitions
┌──────────────────────┬────────┬────────────────────────────────────────┐ │Name │Bit Mask│Description │ ├──────────────────────┼────────┼────────────────────────────────────────┤ │VPB_FM_WRITEABLE │0x01 │Set if we know volume can be written │ ├──────────────────────┼────────┼────────────────────────────────────────┤ │VPB_FM_UNKNOWN │0x02 │Set if no FATs and not claimed by FSD │ ├──────────────────────┼────────┼────────────────────────────────────────┤ │VPB_REMOTE_DRIVE │0x04 │set for attaches of remote drives │ ├──────────────────────┼────────┼────────────────────────────────────────┤ │VPB_FM_ALLOCSHWAIT │0x08 │Set if somebody wants alloc access so │ │ │ │that they can get some disk clusters for│ │ │ │this volume │ ├──────────────────────┼────────┼────────────────────────────────────────┤ │VPB_FM_ALLOCEXWAIT │0x10 │excl.access wait for somebody who wants │ │ │ │to release some clusters │ ├──────────────────────┼────────┼────────────────────────────────────────┤ │VPB_FM_INITCACHE_ERROR│0x20 │Error initializing cache │ ├──────────────────────┼────────┼────────────────────────────────────────┤ │VPB_FM_INITCACHE_DONE │0x40 │ │ └──────────────────────┴────────┴────────────────────────────────────────┘
vpbfsd
┌────────────┬──────┬──────┬────┬────────────┐ │Field Name │Offset│Length│Type│Description │ ├────────────┼──────┼──────┼────┼────────────┤ │vpd_work[64]│0 │40 │B │ │ ├────────────┼──────┼──────┼────┼────────────┤ ├────────────┼──────┼──────┼────┼────────────┤ │ │ │ │B │ │ └────────────┴──────┴──────┴────┴────────────┘
vpbfsi
┌────────────┬──────┬──────┬────┬────────────────────────────────────────┐ │Field Name │Offset│Length│Type│Description │ ├────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │vpi_ID │0 │4 │D │32 bit unique ID of file (See │ │ │ │ │ │UNREAD_IDx, DAMAGED_IDx ) │ ├────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │vpi_pDPB │4 │4 │D │Drive volume is in │ ├────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │vpi_cbSector│8 │2 │W │Size of physical sector in bytes │ ├────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │vpi_totsec │A │4 │D │Total number of sectors on medium │ ├────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │vpi_trksec │E │2 │W │Sectors per track on medium │ ├────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │vpi_nhead │10 │2 │W │Number of heads in device │ ├────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │vpi_text[12]│12 │C │B │ │ ├────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │vpi_pDCS │1E │4 │D │device capability struc │ ├────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │vpi_pVCS │22 │4 │D │volume characteristic struc │ ├────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │vpi_drive │26 │1 │B │drive (0=A) │ ├────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │vpi_unit │27 │1 │B │unit │ ├────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │vpi_flags │28 │2 │W │flags for memory restrictions │ ├────────────┼──────┼──────┼────┼────────────────────────────────────────┤ └────────────┴──────┴──────┴────┴────────────────────────────────────────┘
vpdFATFS
┌──────────────────────┬──────┬──────┬────┬────────────────────────────────────────┐ │Field Name │Offset│Length│Type│Description │ ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │vpdFAT_cluster_mask │0 │1 │B │Sectors/cluster - 1 │ ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │vpdFAT_cluster_shift │1 │1 │B │Log2 of sectors/cluster │ ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │vpdFAT_first_FAT │2 │2 │W │Starting record of FATs │ ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │vpdFAT_FAT_count │4 │1 │B │Number of FATs for this drive │ ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │vpdFAT_root_entries │5 │2 │W │Number of directory entries │ ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │vpdFAT_first_sector │7 │4 │D │First sector of first cluster │ ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │vpdFAT_max_cluster │B │2 │W │Number of clusters on drive + 1 │ ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │vpdFAT_FAT_size │D │2 │W │Number of records occupied by FAT │ ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │vpdFAT_dir_sector │F │4 │D │Starting record of directory │ ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │vpdFAT_media │13 │1 │B │Media byte (duplicate of VPB) │ ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │vpdFAT_next_free │14 │2 │W │Cluster # of last allocated cluster │ ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │vpdFAT_free_cnt │16 │2 │W │Count of free clusters, -1 if unknown │ ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │vpdFAT_FATentrysize │18 │1 │B │12 or 16 - can you guess why ??? @@ │ ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │vpdFAT_IDsector │19 │4 │D │sector number of ID │ ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │vpdFAT_minEOF │1D │2 │W │minimum EOF cluster value: 12-bit -> │ │ │ │ │ │FF8, 16-bit -> FFF8 │ ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │vpdFAT_access │1F │2 │W │whether rmdir XOR mov dir XOR (chdir │ │ │ │ │ │mkdir OR mov file OR create)* has access│ │ │ │ │ │to volume │ ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │vpdFAT_accwait │21 │2 │W │who's waiting for access │ ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │vpdFAT_alloc │23 │2 │W │whether disk cluster alloc OR release │ ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │vpdFAT_eaflags │25 │2 │W │flags for EA usage │ ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │vpdFAT_eareaders │27 │2 │W │number of threads with pending reads │ ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │vpdFAT_eawaiters │29 │2 │W │number of threads waiting to run │ ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │vpdFAT_eahandles │2B │2 │W │number of handles in EAOffTable │ ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │vpdFAT_pEASFT │2D │4 │D │SFT for "EA DATA. SF" │ ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │vpdFAT_pBadSector │31 │4 │D │Ptr for Bad sectors data │ ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │vpdFAT_pClusBitMap │35 │4 │D │Ptr to free cluster bit map │ ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │vpdFAT_pNextFreeBitMap│39 │4 │D │Ptr to next free bit map position │ ├──────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │vpdFAT_cNextFreeBitMap│3D │2 │W │Count of dwords remaining in bit map │ └──────────────────────┴──────┴──────┴────┴────────────────────────────────────────┘
vpdFAT_eaflags flag definitiions
┌──────────────┬────────┬──────────────────────────────────┐ │Name │Bit Mask│Description │ ├──────────────┼────────┼──────────────────────────────────┤ │eavpb_fileopen│0x0001 │the EA file on this volume is open│ ├──────────────┼────────┼──────────────────────────────────┤ │eavpb_changing│0x0002 │the EA file is changing │ ├──────────────┼────────┼──────────────────────────────────┤ │eavpb_dooropen│0x0004 │the drive door has been opened │ └──────────────┴────────┴──────────────────────────────────┘