获取由 Microsoft OneDrive 管理的文件的完整文件属性
Getting full file attributes for files managed by Microsoft OneDrive
Microsoft OneDrive 允许在本地、远程或以两种方式存储文件。这是由 Windows 10:
中出现的新文件属性决定的
FILE_ATTRIBUTE_PINNED 0x00080000
FILE_ATTRIBUTE_UNPINNED 0x00100000
FILE_ATTRIBUTE_RECALL_ON_OPEN 0x00040000
FILE_ATTRIBUTE_RECALL_ON_DATA_ACCESS 0x00400000
以及继承自Windows以前版本的一些文件属性:
FILE_ATTRIBUTE_SPARSE_FILE 0x00000200
FILE_ATTRIBUTE_REPARSE_POINT 0x00000400
FILE_ATTRIBUTE_OFFLINE 0x00001000
问题是我找不到通过 Win32 API 或 NT Native API 检索这些新文件属性的方法。到目前为止我已经尝试过:
GetFileAttributes()
FindFirstFile()
NtQueryAttributesFile()
对于设置为始终远程存储的 OneDrive 文件,所有这些方法 return 0x00500020 而真实属性为 0x00501620(REPARSE_POINT、SPARSE_FILE 和 OFFLINE 被屏蔽掉)。可以使用以下 PowerShell 命令检索真实的文件属性:
[Convert]::ToString( (Get-ItemProperty -Path 'C:\Users\username\OneDrive\test.txt').Attributes.Value__, 16 )
attrib.exe
系统命令还能够显示一些与 OneDrive 相关的新文件属性(O
表示离线,U
表示未固定,P
表示固定).
有没有办法在我的软件中检索这些文件属性?也许我需要在清单中添加一些东西?
来自 MSDN RtlSetThreadPlaceholderCompatibilityMode
When placeholders are exposed, characteristics such as the presence of
a reparse point, the sparse bit, and the offline bit are plainly
visible through directory enumeration and other types of file
information queries. When placeholders are disguised, these details
are completely hidden, making the file look like a normal file.
Most Windows applications see exposed placeholders by default. For
compatibility reasons, Windows may decide that certain applications
see disguised placeholders by default.
我猜测 Windows 已将您的测试程序置于某种兼容模式,因此正在过滤属性。
Microsoft OneDrive 允许在本地、远程或以两种方式存储文件。这是由 Windows 10:
中出现的新文件属性决定的FILE_ATTRIBUTE_PINNED 0x00080000
FILE_ATTRIBUTE_UNPINNED 0x00100000
FILE_ATTRIBUTE_RECALL_ON_OPEN 0x00040000
FILE_ATTRIBUTE_RECALL_ON_DATA_ACCESS 0x00400000
以及继承自Windows以前版本的一些文件属性:
FILE_ATTRIBUTE_SPARSE_FILE 0x00000200
FILE_ATTRIBUTE_REPARSE_POINT 0x00000400
FILE_ATTRIBUTE_OFFLINE 0x00001000
问题是我找不到通过 Win32 API 或 NT Native API 检索这些新文件属性的方法。到目前为止我已经尝试过:
GetFileAttributes()
FindFirstFile()
NtQueryAttributesFile()
对于设置为始终远程存储的 OneDrive 文件,所有这些方法 return 0x00500020 而真实属性为 0x00501620(REPARSE_POINT、SPARSE_FILE 和 OFFLINE 被屏蔽掉)。可以使用以下 PowerShell 命令检索真实的文件属性:
[Convert]::ToString( (Get-ItemProperty -Path 'C:\Users\username\OneDrive\test.txt').Attributes.Value__, 16 )
attrib.exe
系统命令还能够显示一些与 OneDrive 相关的新文件属性(O
表示离线,U
表示未固定,P
表示固定).
有没有办法在我的软件中检索这些文件属性?也许我需要在清单中添加一些东西?
来自 MSDN RtlSetThreadPlaceholderCompatibilityMode
When placeholders are exposed, characteristics such as the presence of a reparse point, the sparse bit, and the offline bit are plainly visible through directory enumeration and other types of file information queries. When placeholders are disguised, these details are completely hidden, making the file look like a normal file.
Most Windows applications see exposed placeholders by default. For compatibility reasons, Windows may decide that certain applications see disguised placeholders by default.
我猜测 Windows 已将您的测试程序置于某种兼容模式,因此正在过滤属性。