winapi - 如何自动对 "cloud"文件 (OneDrive) 进行无水化、部分水化和完全水化以进行测试?

标签 winapi windows-10 onedrive ntfs windows-10-desktop

我想测试一些软件,并希望使其在云文件方面表现良好。作为引用,引入了 RtlIsPartialPlaceholderRtlIsCloudFilesPlaceholder 等函数,以便查看遍历文件夹层次结构时返回的信息。上面的链接指向内核模式文档,但这些函数也存在于用户模式(ntdll.dll)中,并且它们的实现非常简单。

但是,为了测试所述软件,我必须能够以某种方式为 OneDrive 上的文件创建占位符所处的状态。

我可以使用哪些函数(注册的 COM 类也可以)来自动创建可重复的测试设置,我可以使用它来:

  1. 创建占位符
  2. 部分水合占位符
  3. 对目录文件实现相同的效果

PS:this question 是唯一一个远程连接到该主题的人,我可以在 SO 上找到它。

最佳答案

使用 Win32 API 可以透明地实现标准文件/目录操作(创建/读/写等)。这就是这项技术的全部意义。

因此,您可以使用标准 Win32 API 创建占位符。

如果您在“同步根”(例如 OneDrive 案例中的 OneDrive 文件夹层次结构)中创建文件或目录,关联的同步引擎进程(例如 OneDrive.exe)将确保该文件或目录是占位符。而且您无法在同步根层次结构之外创建占位符,据我所知。

对于文件(不能对目录进行水合或脱水),读/写对应于水合。请注意,某些同步引擎(和/或取决于其配置)可以决定始终完全水合文件,即使最终用户 API(应用程序)仅请求一些字节。

有一些特定的 Win32 API 用于特殊操作。

您可以使用 CfDehydratePlaceholder 对文件进行脱水。您可以水合文件 CfHydratePlaceholder 。对于所有 Cloud Filter API,在创建目录句柄时,不要忘记使用 FILE_FLAG_BACKUP_SEMANTICS 标志。

关于winapi - 如何自动对 "cloud"文件 (OneDrive) 进行无水化、部分水化和完全水化以进行测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68137435/

相关文章:

azure - 使用 API 在 OneDrive 上创建文件夹

C# 登录并上传到 OneDrive 无需用户交互

winapi - 在 Windows Vista 和 Windows 7 上使用 HEAP_NO_SERIALIZE 的堆内存函数速度减慢约 100 倍的原因

windows-10 - Windows 10 1607 中粘滞便笺的保存位置

c++ - 如何使用文件系统库获取 "true"文件大小? (C++17)

c# - Windows 10 中缺少 makecert.exe,如何获取和使用它

python - 如何在 Windows 上安装 tesserocr?

.net - 用于访问 Dropbox、iCloud、SkyDrive 等的单个 C# API?

c++ - 在另一个文件中添加全局变量时的奇怪行为

c++ - 如何让父子窗口的颜色相同?