On my W7 VHD's I was getting an exception when enumerating the attributes of a file. I found that in File.cs there is a comparision in LoadAttributes():
if (lastAttr == null || lastType != record.Type || lastName != record.Name)
This caused some name attributes to be treated as extents. Later in the code when the extents are attempted to be read in NtfsAttributeBuffer.cs / GetExtent it attempts to cast the resident attribute to a (NonResidentAttributeRecord)extents[i] and
(since the cast is invalid) throws an exception.
I suggest changing it to:
if (lastAttr == null || lastType != record.Type || lastName != record.Name || record.Type == AttributeType.FileName)
Filename attributes are always resident, they will never be in an extent.