I'm examining the NTFS (New Technology File System) and have been stuck in a loop trying to figure out the $ATTRIBUTE_LIST attribute. From this documentation, it is unusual to come across an $ATTRIBUTE_LIST and they're only used if the MFT table is running out of room. However, from looking at the following parsers, I've found they do parse it:
From looking at these, I've come up with the following flowchart:
(There should be a yes to the right of "Has $ATTRIBUTE_LIST")
I would like to refer to the 2 processes on the right side of the flow chart. Is it correct that:
they're only used if the MFT table is running out of room
This is not correct. They are used whenever the MFT entry is too large to hold all the attributes.
The attribute is only parsed if it's FRN is different than the file containing the attribute lists FRN?
It depends on the OS/software, I guess, but it kinda makes sense. While $ATTRIBUTE_LIST
must contain a list of all attributes, you can enumerate "local" attributes by simply parsing the whole MFT entry. For instance, my software RecuperaBit does it that way.
Conversely, you need the list to figure out in which other MFT entries the "remote" attributes are stored.
Or, is the FRN listed in the attribute only used for attributes for this file record (and not really a file)?
The MFT entry whose number is contained in the $ATTRIBUTE_LIST
attribute does not contain a $DATA
attribute and doesn't have a $FILE_NAME
attribute either. It is not a file, it's just an additional MFT entry.
Note: I edited the answer because I was using the word "resident" in a confusing way to refer to attributes inside the base MFT entry. However, the concept of resident attribute is a different thing.