A reparse point acts like a miniature "redirector" inside an individual MFT record. The reparse point contains the name of a folder, volumes, or device such as a CD-ROM or DVD. When the MFT record containing the reparse point is opened, the target of the reparse point is opened instead. Using reparse points, it is possible to represent volumes and drives as folders, eliminating the need for additional drive letters and share points.
You have already encountered reparse points at least once in your deployment of Windows Server 2003. Every time you open the Sysvol folder on a domain controller and drill down through a folder with a domain name, you're going through a reparse point. The \Windows\Sysvol\Sysvol\Domain_Name folder actually mounts a folder at \Windows\Sysvol\Domain.
If you open a command prompt and pull a directory of the contents of the \Windows\Sysvol\Sysvol folder, you'll see that the file type shows up as <JUNCTION> rather than <DIR>. This is how the command shell identifies a reparse point. Another term is a mount point.
If you create a mount point that points at a device such as a CD-ROM or DVD, Explorer uses the icon representing the AutoRun executable on the media to give a hint about the nature of the device at the other end of the mount point.
Microsoft also uses reparse points to support the hierarchical storage management features in Remote Storage Services, or RSS. In RSS, a file physically resides on a tape library with a stub, in the form of a reparse point, left behind on the disk to act as a pointer.
Functional Description of Reparse Points
A reparse point is simply an attribute called $Reparse_Point inserted into a standard directory record in place of an $Index_Allocation attribute. The $Reparse_Point attribute contains an identifier that tells the system what is being mounted and a symbolic link to the target. A symbolic link is an operating system construct inside the object namespace. You can view the contents of the object namespace using WINOBJ from the Platform SDK or a utility of the same name (but more features) from www.sysinternals.com.
Figure 15.16 shows a diagram of the components involved in reparse point transactions. The mount point is always a standard folder. The target, in this case, is a folder on another volume in the machine. Any local volume or device that has a mountable file system is fair game as the target of a reparse point. You cannot create reparse points for network file systems.
Figure 15.16. Reparse Point components.
The target volume or device can be formatted with any file system supported by Windows Server 2003. This includes FAT, FAT32, NTFS, CDFS, UDFS, or RSS_FS. The volume can contain compressed files, encrypted files, and sparse files.
Information about the target file system is stored in a hidden database under the Root directory called $RemoteMountManager. Vendors can add file system filter drivers to this database for use when opening a particular device. The database is a named data stream in the $Reparse metadata record.
The $Reparse record also maintains an index that correlates the contents of the Remote Mount Manager database and any MFT records that contain a symbolic link reference in a $Reparse_Point attribute.
Using this information, when a user double-clicks on a mount point, the file system simply opens the MFT record for the mount point, makes note of the symbolic link, checks for filter drivers in the Remote Mount Manager database, then opens the volume or device and presents the contents as if they were part of the file system containing the mount point.
One use for this technology is CD-ROM towers. If you tire of creating a logical drive for every CD-ROM in a tower then mapping your users to those drives one by one, you can leave all that behind with a Madison Avenue flourish by creating mount points in an existing volume that point to each drive in the CD-ROM tower. Users access the CD-ROM drives via folders under a share point, just as if they were opening folders on a hard drive.
For step-by-step procedures to create and manage reparse points, see the "Reparse Point Operations" section later in this chapter.
Reparse Points Highlights
Here are some key points to remember about reparse points:
If a folder record has any file or directory entries, it cannot be used as a mount point. The folder must be completely empty.
Explorer does not add the capacity of the mounted volume to the capacity of the source volume when displaying drive utilization or free space. This means you can mount a 30GB drive from an existing 4GB volume, call it Drive D, but Explorer and the command line will continue to report the size of Drive D as 4GB.
A search of the parent volumeЧor running a DOS utility such as TREEЧincludes the contents of any mounted volumes.
A volume can be accessed by several mount points. Be careful if you do this. There is great potential for confusion and grief. Imagine the Help Desk call if you have two mount points under separate share points that link to the same target volume. The phone call goes something like this. "I copied all my files to my K:\MyData folder and then deleted my R:\MyData and now I can't see any files in K:\MyData. What happened?"
Copying a folder with mounted volumes also copies the contents of the mounted volumes.
Removing a mount point using the RD command only deletes the MFT record containing the reparse point, not the underlying volume. If, however, you delete a mount point using DEL or you use Explorer to send the mount point to the Recycle Bin or delete to it entirely, all the files and directories in the mounted volume are deleted.
When backing up volumes with mount points, the backup includes files and directories on the mounted volumes. Keep this in mind when mounting a volume at multiple mount points. You could end up backing up the same volume several times. Ntbackup has the option to skip restoration from junction points and the files under those junction points.