获取Microsoft OneDrive管理的文件的完整文件属性

问题描述 投票:1回答:1

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文件,所有这些方法都返回0x00500020,而true属性为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用于固定)。

有没有办法在我的软件中检索文件属性?也许我需要在清单上添加一些东西?

winapi attributes onedrive ntfs reparsepoint
1个回答
1
投票

来自MSDN RtlSetThreadPlaceholderCompatibilityMode

当暴露占位符时,通过目录枚举和其他类型的文件信息查询,可以清楚地看到诸如重新分析点,稀疏位和脱机位等特征。当占位符被伪装时,这些细节被完全隐藏,使文件看起来像普通文件。

大多数Windows应用程序默认情况下看到暴露的占位出于兼容性原因,Windows可能会决定某些应用程序默认情况下会看到伪装的占位符。

我猜测Windows已将您的测试程序置于某种兼容模式,因此会过滤属性。

RtlSetThreadPlaceholderCompatibilityMode

© www.soinside.com 2019 - 2024. All rights reserved.