docs: def get_full_path(self, fn_attr):
          '''Returns the full path of a FILENAME.
  
          The NTFS filesystem allows for things called hardlinks. Hard links are
          saved, internally, as different filename attributes. Because of this,
          an entry can, when dealing with full paths, have multiple full paths.
  
          As such, this function receives a fn_attr and uses it to compute
          the full path for this particular attribute.
  
          Also, the MFT entry might still exist, but the file has been deleted,
          depending on the state of the MFT, the path might not be fully reconstructable,
          these entries are called "orphan".
  
          Args:
              fn_attr (:obj:`Attribute`): An attribute that has a FILENAME as content
  
          Returns:
              tuple(bool, str): A tuple where the first element is a boolean that
                  is ``True`` if the the file is orphan and ``False`` if not. The
                  second element is a string with the full path
          '''
          if fn_attr.header.attr_type_id is not AttrTypes.FILE_NAME:
              raise MFTError("Need a filename attribute to compute full path.")
  
          orphan, path = self._compute_full_path(fn_attr.content.parent_ref, fn_attr.content.parent_seq)
          return (orphan, "\\".join([path, fn_attr.content.name]))