我想测试一些软件,并希望使其在云文件方面表现良好。作为引用,引入了 RtlIsPartialPlaceholder
和 RtlIsCloudFilesPlaceholder
等函数,以便查看遍历文件夹层次结构时返回的信息。上面的链接指向内核模式文档,但这些函数也存在于用户模式(ntdll.dll)中,并且它们的实现非常简单。
但是,为了测试所述软件,我必须能够以某种方式为 OneDrive 上的文件创建占位符所处的状态。
我可以使用哪些函数(注册的 COM 类也可以)来自动创建可重复的测试设置,我可以使用它来:
- 创建占位符
- 仅部分水合占位符
- 对目录和文件实现相同的效果
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/