小编Mik*_*hik的帖子

获取 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 
Run Code Online (Sandbox Code Playgroud)

以及从以前版本的 Windows 继承的一些文件属性:

FILE_ATTRIBUTE_SPARSE_FILE           0x00000200
FILE_ATTRIBUTE_REPARSE_POINT         0x00000400  
FILE_ATTRIBUTE_OFFLINE               0x00001000      
Run Code Online (Sandbox Code Playgroud)

问题是我无法找到通过 Win32 API 或 NT Native API 检索这些新文件属性的方法。到目前为止我已经尝试过:

GetFileAttributes()
FindFirstFile()
NtQueryAttributesFile()
Run Code Online (Sandbox Code Playgroud)

对于设置为始终远程存储的 OneDrive 文件,所有这些方法都返回 0x00500020,而真实属性为 0x00501620(REPARSE_POINT、SPARSE_FILE 和 OFFLINE 被屏蔽)。可以使用以下 PowerShell 命令检索真实的文件属性:

[Convert]::ToString( (Get-ItemProperty -Path 'C:\Users\username\OneDrive\test.txt').Attributes.Value__, 16 )
Run Code Online (Sandbox Code Playgroud)

attrib.exe系统命令还能够显示一些新的 OneDrive 相关文件属性(O脱机、U取消固定、P固定)。

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

winapi attributes ntfs reparsepoint onedrive

5
推荐指数
1
解决办法
2390
查看次数

标签 统计

attributes ×1

ntfs ×1

onedrive ×1

reparsepoint ×1

winapi ×1