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

2024-02-22

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,而真实属性为 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

当占位符暴露时,诸如存在等特征 重分析点、稀疏位和离线位很明显 通过目录枚举和其他类型的文件可见 信息查询。当占位符被伪装时,这些细节 完全隐藏,使文件看起来像普通文件。

默认情况下,大多数 Windows 应用程序都会看到公开的占位符。为了 兼容性原因,Windows 可能会决定某些应用程序 默认情况下会看到伪装的占位符。

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

RtlSetThreadPlaceholder兼容性模式 https://learn.microsoft.com/en-us/windows-hardware/drivers/ddi/content/ntifs/nf-ntifs-rtlsetthreadplaceholdercompatibilitymode

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • 使用 WinHTTP API 进行证书固定

    是否可以使用 Win32 WinHTTP API 实现证书固定 如果可以 如何实现 IE 如何根据 已知良好 的证书检查返回的服务器证书 最好不必将证书永久写入本地证书存储 受到jww的回答的启发 首先我发现这一页 https www ow
  • Python - AttributeError:“NoneType”对象没有属性“findAll”

    我已经编写了第一段 python 代码来抓取网站 import csv import urllib2 from BeautifulSoup import BeautifulSoup c csv writer open data csv wb
  • CoTaskMemAlloc v malloc v AllocHGlobal

    我读过 在 Windows 上 malloc 与 CoTaskMemAlloc 不同 CoTaskMemAlloc 与 AllocHGlobal 不同 对于 C 用户来说 这意味着如果我有一个返回 malloc 指针的 C 函数 我需要对其
  • Pattern 和 type="email" 一起使用是否有问题?

    HTML5 电子邮件类型和模式 使用新的 HTML5 之间是否存在任何问题 冲突或其他问题 type值 例如email tel等 与pattern属性 我不是指 HTML5 浏览器兼容性 只是指这些属性的新值与pattern属性 为了清楚起
  • 在调试器下运行时,AssignProcessToJobObject 失败并出现“访问被拒绝”错误

    You do AssignProcessToJobObject并且仅当您在调试器中运行时才会因 访问被拒绝 而失败 为什么是这样 这个问题让我困惑了大约30分钟 首先 您可能需要在您的应用程序中嵌入一个 UAC 清单 正如这里所建议的 ht
  • 获取DLL函数的内存地址

    我想知道是否有可能 使用 C 和 WindowsAPI 是否有一个函数可以让我获得 dll 中函数的 32 位 我认为 内存地址 例如 如何获取 kernel32 dll 中 Beep 的 32 位 xxxxxxxx 地址 其次 如果我在汇
  • Delphi XE 和使用 OnKeyDown 捕获箭头键

    我希望我的表单能够处理箭头键 而且我可以做到 只要表单上没有按钮 为什么是这样 关键消息由接收这些消息的控件本身进行处理 这就是为什么当您使用按钮时表单不会接收消息 因此 通常您必须对这些控件进行子类化 但 VCL 足够友好地询问父子表单如
  • GetTokenInformation、TOKEN_OWNER 和 LookupAccountSidA

    我正在尝试使用这些功能来获取运行该进程的用户名 这是代码 include
  • 当将位图加载为 Windows 资源时,是否有办法保留 BITMAPFILEHEADER?

    我一直在使用测试一些东西SFML 1 4 http sfml dev org 简单快速的多媒体库 采用 C 和 Visual C 2008 Express Edition 为了避免我的图形程序出现外部图像 我正在测试sf Image Loa
  • 如何在 Win32 中滚动条到达底部时启用按钮?

    我正在用 Win32 编写一个许可协议对话框 但我很困惑 与往常一样 我希望当 RichEdit 控件的滚动条滑块到达底部时启用 接受 不接受 按钮 但我找不到获得该事件通知的方法 我最早能够了解它是当用户释放鼠标左键时 有没有办法做到这一
  • 为什么没有定义 PCTSTR 而定义了 LPCTSTR?

    我被指派更新用 MSVC 6 编写的旧代码 我得到了 PCTSTR 的未知定义 但即使我包含了 tchar h 它也没有定义 根据我以前的经验 我知道有 LPTSTR 但没有 PCTSTR 我 grep C Program Files Mi
  • 在 Windows 任务栏中对单独的进程进行分组

    我有许多逻辑上相关的独立进程 但所有进程都是单独启动的 没有共同的 父 进程 是否可以使它们在 Windows 任务栏中显示为一组 工作样本 这是一些受雷米答案启发的工作代码 using System using System Runtim
  • EnumChildWindows 还是 FindWindowEx?

    我可以选择使用 API EnumChildWindows 或 FindWindowEx 中的任何一个 有什么建议哪个 api 更注重性能 FindWindowEx 内部是否使用 EnumChildWindows 来获取特定窗口的句柄 这实际
  • 如何使用VerQueryValue?

    我有一个 exe 需要从特定 dll 检索版本信息 例如 FileDescription 我的代码已经调用了 GetFileVersionInfoSize 和 GetFileVersionInfo 但我不知道如何应用 VerQueryVal
  • 在 C++\Win32 中编辑控件文本更改消息

    与 NET for C Win32 中的 TextChanged 属性匹配的消息是什么 假设你正在谈论编辑控件 http msdn microsoft com en us library bb775458 VS 85 aspx EN CHA
  • Windows Server / Datacenter:设置 CPU 关联性 > 64 个核心

    SetThreadAffinityMask 允许为 64 个逻辑核心 处理器 设置关联掩码 但是 Windows Datacenter 最多可以有 64 个 CPU 每个 CPU 都有多个内核 请参阅here http social tec
  • Python 对象属性 - 访问方法

    假设我有一个具有某些属性的类 在 Pythonic OOP 中 如何访问这些属性是最好的 就像obj attr 或者也许编写 get 访问器 此类事物可接受的命名风格是什么 Edit 您能否详细说明使用单下划线或双前导下划线命名属性的最佳实
  • windows下删除进程权限

    出于安全原因 我正在寻找一种删除进程权限的方法 我想以具有特权的用户身份开始 并以受限用户身份结束 例如 我希望我的 Web 服务器在受限用户下运行 但我仍然想监听端口 80 我怎样才能在Windows下做这样的事情 与 Unix 类似的东
  • 如何检测Windows 8.1开始菜单?

    当我们在 Windows 8 1 上按下开始菜单时 它会以磁贴的形式显示所有新的开始菜单以及应用程序 该菜单显示在整个屏幕上 有没有办法检测这个菜单是否在 C 中打开 8 1 SDK 中是否有 winAPI 可以执行此操作 提前致谢 调用
  • Windows 10 关闭、最小化和最大化按钮

    要绘制主题按钮 我使用以下代码 var h HTHEME begin if UseThemes then begin SetWindowTheme Handle explorer nil h OpenThemeData Handle WIN

随机推荐