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

How can I automate no, partial and full hydration of "cloud" files (OneDrive) for testing?

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

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

我可以使用哪些功能(注册 COM 类 也可以)来自动创建可重现的测试设置,我可以将其用于:

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

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

标准 file/directory 操作(create/read/write 等)可以使用 Win32 API 透明地实现。这就是这项技术的全部意义所在。

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

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

对于文件(您不能对目录进行水化或脱水),reading/writing 对应于水化。请注意,一些同步引擎(and/or 取决于它们的配置)可以决定始终完全水化文件,即使最终用户只询问了一些字节 API(应用程序)。

虽然有一些特定的 Win32 APIs 用于特殊操作。

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