Important: The information in this document is obsolete and should not be used for new development.
Volume Control Blocks
Each time a volume is mounted, the File Manager reads its volume information from the master directory block and uses the information to build a new volume control block (VCB) in the volume control block queue (unless an ejected or offline volume is being remounted). The File Manager also creates a volume buffer in the system heap. When a volume is placed offline, its buffer is released. When a volume is unmounted, its VCB is removed from the VCB queue as well.
The volume control block queue is a standard Operating System queue that's maintained in the system heap. It contains a volume control block for each mounted volume. A volume control block is a nonrelocatable block that contains volume-specific information. The structure of a volume control block is defined by the
- Assembly-Language Note
- The global variable
VCBQHdr
contains the header of the VCB queue. The global variableDefVCBPtr
points to the VCB of the default volume.- WARNING
- The size and structure of a VCB may be different in future versions of Macintosh system software. To ensure that you are reading the correct version of a VCB, check the
vcbSigWord
field; it should contain the value $4244.VCB
data type.
TYPE VCB = {volume control block} RECORD qLink: QElemPtr; {next queue entry} qType: Integer; {queue type} vcbFlags: Integer; {volume flags} vcbSigWord: Integer; {volume signature} vcbCrDate: LongInt; {date and time of volume creation} vcbLsMod: LongInt; {date and time of last modification} vcbAtrb: Integer; {volume attributes} vcbNmFls: Integer; {number of files in root directory} vcbVBMSt: Integer; {first block of volume bitmap} vcbAllocPtr: Integer; {start of next allocation search} vcbNmAlBlks: Integer; {number of allocation blocks in volume} vcbAlBlkSiz: LongInt; {size (in bytes) of allocation blocks} vcbClpSiz: LongInt; {default clump size} vcbAlBlSt: Integer; {first allocation block in volume} vcbNxtCNID: LongInt; {next unused catalog node ID} vcbFreeBks: Integer; {number of unused allocation blocks} vcbVN: String[27]; {volume name} vcbDrvNum: Integer; {drive number} vcbDRefNum: Integer; {driver reference number} vcbFSID: Integer; {file-system identifier} vcbVRefNum: Integer; {volume reference number} vcbMAdr: Ptr; {used internally} vcbBufAdr: Ptr; {used internally} vcbMLen: Integer; {used internally} vcbDirIndex: Integer; {used internally} vcbDirBlk: Integer; {used internally} vcbVolBkUp: LongInt; {date and time of last backup} vcbVSeqNum: Integer; {volume backup sequence number} vcbWrCnt: LongInt; {volume write count} vcbXTClpSiz: LongInt; {clump size for extents overflow file} vcbCTClpSiz: LongInt; {clump size for catalog file} vcbNmRtDirs: Integer; {number of directories in root dir.} vcbFilCnt: LongInt; {number of files in volume} vcbDirCnt: LongInt; {number of directories in volume} vcbFndrInfo: ARRAY[1..8] OF LongInt; {information used by the Finder} vcbVCSize: Integer; {used internally} vcbVBMCSiz: Integer; {used internally} vcbCtlCSiz: Integer; {used internally} vcbXTAlBks: Integer; {size of extents overflow file} vcbCTAlBks: Integer; {size of catalog file} vcbXTRef: Integer; {ref. num. for extents overflow file} vcbCTRef: Integer; {ref. num. for catalog file} vcbCtlBuf: Ptr; {ptr. to extents and catalog caches} vcbDirIDM: LongInt; {directory last searched} vcbOffsM: Integer; {offspring index at last search} END;
- Note
- The values in the
vcbNmAlBlks
andvcbFreeBks
fields are unsigned integers (that is, they can range from 0 to 65,535, not from -32,768 to 32,767). Because Pascal does not support unsigned data types, you need to use the technique illustrated in "Determining the Amount of Free Space on a Volume" on page 2-46 to read the values in these fields correctly.Field Description
qLink
- A pointer to the next entry in the VCB queue. You can get a pointer to the header of the VCB queue by calling the File Manager utility function
GetVCBQHdr
.qType
- The queue type. When the volume is mounted and the VCB is created, this field is cleared. Thereafter, bit 7 of this field is set whenever a file on that volume is opened.
vcbFlags
- Volume flags. Bit 15 is set if the volume information has been changed by a File Manager call since the volume was last affected by a
FlushVol
call.vcbSigWord
- The volume signature. For HFS volumes, this field contains $4244.
vcbCrDate
- The date and time of volume creation (initialization).
vcbLsMod
- The date and time of last modification. This is not necessarily when the volume was last flushed.
vcbAtrb
- Volume attributes. The bits have these meanings:
Bit Meaning 0-5 Reserved 6 Set if the volume is busy (one or more files are open) 7 Set if the volume is locked by hardware 8-14 Reserved 15 Set if the volume is locked by software vcbNmFls
- The number of files in the root directory.
vcbVBMSt
- The first block of the volume bitmap.
vcbAllocPtr
- The start block of the next allocation search. Used internally.
vcbNmAlBlks
- The number of allocation blocks in the volume.
vcbAlBlkSiz
- The allocation block size (in bytes). This value must always be a multiple of 512 bytes.
vcbClpSiz
- The default clump size.
vcbAlBlSt
- The first allocation block in the volume.
vcbNxtCNID
- The next unused catalog node ID (directory ID or file ID).
vcbFreeBks
- The number of unused allocation blocks on the volume.
vcbVN
- The volume name. This field consists of a length byte followed
by 27 bytes. Note that the volume name can occupy at most
27 characters; this is an exception to the normal file and directory name limit of 31 characters.vcbDrvNum
- The drive number of the drive on which the volume is located. When a mounted volume is placed offline or ejected,
vcbDrvNum
is set to 0.vcbDRefNum
- The driver reference number of the driver used to access the volume. When a volume is ejected,
vcbDRefNum
is set to the previous value ofvcbDrvNum
(and hence is a positive number). When a volume is placed offline,vcbDRefNum
is set to the
negative of the previous value ofvcbDrvNum
(and hence is
a negative number).vcbFSID
- An identifier for the file system handling the volume; it's zero for volumes handled by the File Manager and nonzero for volumes handled by other file systems.
vcbVRefNum
- The volume reference number.
vcbMAdr
- Used internally.
vcbBufAdr
- Used internally.
vcbMLen
- Used internally.
vcbDirIndex
- Used internally.
vcbDirBlk
- Used internally.
vcbVolBkUp
- The date and time of the last volume backup.
vcbVSeqNum
- Used internally.
vcbWrCnt
- The volume write count.
vcbXTClpSiz
- The clump size of the extents overflow file.
vcbCTClpSiz
- The clump size of the catalog file.
vcbNmRtDirs
- The number of directories in the root directory.
vcbFilCnt
- The number of files on the volume.
vcbDirCnt
- The number of directories on the volume.
vcbFndrInfo
- Information used by the Finder.
vcbVCSize
- Used internally.
vcbVBMCSiz
- Used internally.
vcbCtlCSiz
- Used internally.
vcbXTAlBks
- The size (in blocks) of the extents overflow file.
vcbCTAlBks
- The size (in blocks) of the catalog file.
vcbXTRef
- The path reference number for the extents overflow file.
vcbCTRef
- The path reference number for the catalog file.
vcbCtlBuf
- A pointer to the extents and catalog caches.
vcbDirIDM
- The directory last searched.
vcbOffsM
- The offspring index at the last search.