Windows 21H1版本下Cloud Filter API删除回调功能异常问题问询
问题原因
你遇到的是Windows 10 21H1版本引入的cldflt.sys已知回归Bug,该版本的云过滤驱动对脱水占位符的删除逻辑做了错误调整,会忽略CF_CALLBACK_TYPE_NOTIFY_DELETE回调中返回的错误码,直接执行占位符删除操作,该问题仅影响cldflt.sys版本在10.0.19041.1110到10.0.19043.2006之间的系统版本。
解决方案
方案1:升级系统补丁
微软已经在2022年6月发布的Windows累积更新中修复了该问题,你可以将目标系统升级到以下任意版本即可恢复原有逻辑:
- Windows 10 21H1:升级到19043.1706及以上版本,对应cldflt.sys版本≥10.0.19043.1706
- Windows 10 21H2及以上:所有正式发布版本均已修复该问题
方案2:兼容未打补丁21H1系统的临时方案
如果你的产品必须支持未更新补丁的21H1版本系统,可以通过以下调整实现删除拦截:
- 注册回调时新增
CF_CALLBACK_TYPE_PRE_DELETE回调类型,该回调优先级高于NOTIFY_DELETE,不受本次Bug影响,在该回调中返回错误码即可直接拦截删除操作 - 创建占位符时添加
CF_PLACEHOLDER_CREATE_FLAG_ALWAYS_ASSOCIATE_SYNC_ROOT标记,确保所有占位符始终关联同步根回调,避免出现回调不触发的情况 - 原有
NOTIFY_DELETE回调可以保留,用于兼容更早的Windows 10版本(1909及之前)
现有代码优化建议
你提供的代码中存在内存泄漏问题:堆分配的CF_SYNC_STATUS_MSG对象在CfExecute调用完成后没有释放,建议修改为栈分配,或者在CfExecute返回后主动释放对应的内存。
内容的提问来源于stack exchange,提问作者user16668952
相关产品推荐
相关产品推荐

