NTFS symbolic link
An NTFS symbolic link (symlink) is a filesystem object in the NTFS filesystem that points to another filesystem object. The object being pointed to is called the target. Symbolic links should be transparent to users; the links appear as normal files or directories, and can be acted upon by the user or application in exactly the same manner. Symbolic links to directories or volumes, called junction points and mount points, were introduced with NTFS 3.0 that shipped with Windows 2000. From NTFS 3.1 onwards, symbolic links can be created for any kind of file system object. NTFS 3.1 was introduced together with Windows XP, but the functionality was not made available (through ntfs.sys) to user mode applications. Third-party filter drivers – such as Masatoshi Kimura's opensource
senable driver – could however be installed to make the feature available in user mode as well. The ntfs.sys released with Windows Vista made the functionality available to user mode applications by default.
Windows symbolic links to files are distinct from Windows symbolic links to directories. Unlike an NTFS junction point, an NTFS 3.1 symbolic link can also point to a file or remote SMB network path. While NTFS junction points support only absolute paths on local drives, the NTFS symbolic links allow linking using relative paths. Additionally, the NTFS symbolic link implementation provides full support for cross-filesystem links. However, the functionality enabling cross-host symbolic links requires that the remote system also support them, which effectively limits their support to Windows Vista and later Windows operating systems.
An NTFS symbolic link is not the same as a Windows shortcut file, which is a regular file. The latter may be created on any filesystem (such as the earlier FAT32), may contain metadata (such as an icon to display when the shortcut is viewed in Windows Explorer), and is not transparent to applications.
The default security settings in Windows Vista/Windows 7 disallow non-elevated administrators and all non-administrators from creating symbolic links. This behavior can be changed running "secpol.msc" the Local Security Policy management console (under: Security Settings\Local Policies\User Rights Assignment\Create symbolic links). It can be worked around by starting cmd.exe with Run as administrator option or the
runas command. Starting with Windows 10 Insiders build 14972 the requirement for elevated administrator privileges was removed, allowing symlinks to be created without needing to elevate the console as administrator .
Command-line tools and APIs
mklink command is used to create a symbolic link. It is a built-in command of
cmd.exe in Windows Vista and later.
The command-syntax is:
mklink [[/d] | [/h] | [/j]] <Link> <Target>
/d– This parameter creates a directory symbolic link. mklink creates a file symbolic link by default.
/h– This parameter creates a hard link instead of a symbolic link.
/j– This parameter creates a Directory Junction.
<Link>– This parameter specifies the name of the symbolic link that is being created.
<Target>– This parameter specifies the path that the new symbolic link refers to.
/?– This parameter displays help.
Windows exposes CreateSymbolicLink function in its API starting from Windows Vista. Since
mklink command depends on
cmd.exe it may not be possible to use it in all contexts.
New-SymLink function uses aforementioned API to implement soft link functionality using PowerShell. Community Extensions also contains function
Symbolic links can point to non-existent targets because the operating system does not check to see if the target exists.
Symbolic links do not work at boot, so it's impossible to redirect e.g.:
- folder containing hiberfil.sys (if it's configured to be outside root directory)
Windows Installer does not fully support symbolic links. A redirected \Windows\Installer will cause most .msi-based Windows installers to fail with error 2755 and/or error 1632.
Nevertheless, it is possible to redirect:
- \Documents and Settings
- \Program Files
- \Program Files (x86)
Creating symbolic links for \Users and \ProgramData pointing to another drive is not recommended as it breaks updates and Windows Store Apps.
Creating symbolic links for \Users, \ProgramData, "\Program Files" or "\Program Files (x86)" pointing to other locations breaks installation resp. upgrade of Windows.
Creating symbolic links for "\Program Files" or "\Program Files (x86)" pointing to another drive breaks Windows' Component Based Servicing which hardlinks files from its repository \Windows\WinSxS to their installation directory.
Since Windows XP uses the same NTFS format version as later releases, it's feasible to enable symbolic links support in it. For using NTFS symbolic links under Windows 2000 and XP, a third-party driver exists that does it by installing itself as a file system filter.
- "Symlinks in Windows 10! - Windows Developer BlogWindows Developer Blog". blogs.windows.com.
- Archiveddocs. "Mklink". technet.microsoft.com.
- "Programming Considerations (Windows)". msdn.microsoft.com.
- "Relocation of the Users directory and the ProgramData directory to a drive other than the drive that contains the Windows directory". Retrieved 2015-03-12.
- "You encounter an error when trying to install Windows 8.1 due to redirecting the Users or Program Files folder to another partition". Retrieved 2015-03-12.
- Hermann Schinagl (August 23, 2013). "ln - commandline hardlinks - Symbolic links for Windows XP".