Format of KeysList record in release 3.02.06. It is never compressed. There is one KeysList record for the main (TFile) directory and one per non-empty subdirectory. It is probably not accessed by its key, but from its offset given in the directory data.
----------TKey--------------- byte 0->3 Nbytes = Number of bytes in compressed record (TKey+data) TKey::fNbytes 4->5 Version = TKey class version identifier TKey::fVersion 6->9 ObjLen = Number of bytes of uncompressed data TKey::fObjLen 10->13 Datime = Date and time when record was written to file TKey::fDatime | (year-1995)<<26|month<<22|day<<17|hour<<12|minute<<6|second 14->15 KeyLen = Number of bytes in the key structure (TKey) TKey::fKeyLen 16->17 Cycle = Cycle of key TKey::fCycle 18->21 SeekKey = Byte offset of record itself (consistency check) TKey::fSeekKey 22->25 SeekPdir = Byte offset of parent directory record (directory) TKey::fSeekPdir 26->26 lname = Number of bytes in the class name (5 or 10) TKey::fClassName 27->.. ClassName = Object Class Name ("TFile" or "TDirectory") TKey::fClassName 0->0 lname = Number of bytes in the object name TNamed::fName 1->.. Name = lName bytes with the name of the object `<directory-name>` TNamed::fName 0->0 lTitle = Number of bytes in the object title TNamed::fTitle 1->.. Title = lTitle bytes with the title of the object `<directory-title>` TNamed::fTitle ----------DATA--------------- 0->3 NKeys = Number of keys in list (i.e. records in directory (non-recursive)) | Excluded:: The directory itself, KeysList, StreamerInfo, and FreeSegments 4->.. TKey = Sequentially for each record in directory, | the entire TKey portion of each record is replicated. | Note that SeekKey locates the record.