Skip to content
Suzu
2 min read

【Windows Internal】Reparse Point

Reparse Point 重新解析點

View the complete series →
On this page

【Windows Internal】Reparse Point

Reparse point 叫做重新解析點,

可以想像成是把路徑做轉送,

使用者看到的會是原本的路徑,但經過解析會是目標檔案。

組成&應用

Reparse point 也是 NTFS 的特殊 Metadata,

由 tag 跟 data 組成,解析如果有看到 NTFS 會回傳 STATUS_REPARSE

本身是完全合法的,但是如果一個程式中途可以改路徑可能會有 TOCTOU。

.

常見的 reparse point 應用(以 tag 區分):

應用Reparse tag說明
Junction / [Mount Point](Mount Point)IO_REPARSE_TAG_MOUNT_POINT(0xA0000003)指向本機目錄或磁碟區,核心層解析
Symbolic linkIO_REPARSE_TAG_SYMLINK(0xA000000C)可指檔案或目錄、本機或網路路徑
OneDrive 雲端檔案IO_REPARSE_TAG_CLOUD_*(0x9000001A 起)按需下載的佔位檔(cloud files API)
App execution aliasIO_REPARSE_TAG_APPEXECLINK例如 Microsoft Store 版 Python 的攔截器

實作例子

列出 C:\ 下所有 reparse point(/al 篩選 attribute L = reparse point):

dir /al C:\
 Directory of C:\

2025/12/06  10:30    <JUNCTION>     Documents and Settings [C:\Users]

查詢某個路徑的 reparse data 細節:

fsutil reparsepoint query "C:\Documents and Settings"
Reparse Tag Value : 0xa0000003
Tag value: Microsoft
Tag value: Name Surrogate
Tag value: Mount Point
Substitute Name offset: 0
Substitute Name length: 20
Print Name offset:     22
Print Name Length:     10
Substitute Name:       \??\C:\Users
Print Name:            C:\Users

Reparse Tag Value : 0xa0000003 就是 IO_REPARSE_TAG_MOUNT_POINT,表示它是 junction/mount point

Substitute Name 是核心實際用來改道的 NT 路徑。

部分 fsutil 子命令需提高權限,如果被拒絕的話記得用系統管理員身分執行。

Share this page