Repository navigation
fix: 拖拽卡死族回调隔离批——回调帧禁同步重操作、官方异步拖放协议与安全收口 - #546
Merged
Merged
Conversation
拖拽卡死族修复(调查底档 artifacts/drag-freeze-family-20261014/;五轮方案审查+五轮实现审查+真机七轮验收,D 讯飞机场景全轮零冻结): - 回调隔离层(D3):新增 UiDispatch.PostAfterCallback 推迟原语与 CallbackDepth 雷达(覆盖全部 14 个 subclass proc、IDropTarget 四方法、托盘命令;违规计数常开并入诊断包 schema 8 的 callbackRadar 区)。托盘菜单、托盘左键 toggle、DesktopPinned 激活/落床四入口、标题栏抬组、搜索执行链、快捷方式拖启动一律移出回调帧;落地配窗口存活+前台快照+真实移动(IsDragging&&HasMovedTitleBarDrag)守卫;托盘菜单重入抑制(单调钟+30 秒上界)。 - OLE Drop 减负(D2):虚拟文件物化改走官方 IDataObjectAsyncCapability 异步协议——StartOperation 于 Drop 返回前完成、单 MTA worker 有界队列(8)提取、完成后写回执+EndOperation;队列满与导入忙全路径拒收与临时文件清理。AppsFolder 提取移至 UI STA 出帧执行(壳命名空间 API 不兼容 MTA);DragEnter 保持严格 AppsFolder 分类。快捷方式拖启动拆分为同步占手势(WM_DROPFILES 双通道竞态)+推迟一帧启动,回执乐观 Link。 - 安全收口:拖启动命令行仅接受磁盘存在路径(堵合成 CF_HDROP 参数注入);AppCompat 清理白名单收敛为已知安装位置(移除 HKCU Run 值吸收与任意目录同名 DeskBox.exe 两个注入通道)。 - 附带修复:右键拖放选择菜单的 launchTarget 改为入队前捕获("打开方式"选项恒缺失,存量);S6 explorer 重启风暴插桩(>2 秒默认级告警引导抓 dump)。 - 契约:file_drag §9.23 回调帧内禁同步重操作立法(双轨细则+模态泵注记+挂起源暴露注记+已知未收口清单 12 项债);§4.1 Win10 跟随档勘误、§6.2 第三恢复入口登记、§8.1.1a 治理行更新;zorder 坑#6 改写+坑#10 新增。 - 测试:新增回调隔离契约测试族(含 P/Invoke 导出解析与 VirtualDrops 清理白名单两个行为测试);全量 5525 通过(x64)。
5 of 6 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
拖拽卡死族回调隔离批(1.5.9)
背景
拖拽卡死族的深层根因是代码库缺少一条不变式:消息/OLE/win32k 回调帧内禁止同步窗口手术、进程启动、跨进程 COM 写、大额磁盘物化。历史上 ≥7 起同族事故各自单独修复(yield/defer/轮询/看门狗各自为战)。本批把该不变式落地为机制+立法。
主要变更
UiDispatch.PostAfterCallback推迟原语(Ready 态永不 inline)+CallbackDepth雷达(14 个 subclass proc / IDropTarget 四方法 / 托盘命令全覆盖,违规计数常开并进入诊断包 schema 8)。托盘菜单、左键 toggle、DesktopPinned 四入口、标题栏抬组、搜索执行链、快捷方式拖启动全部移出回调帧,落地配"窗口存活+前台快照+真实移动"守卫。IDataObjectAsyncCapability(StartOperation→单 MTA worker 有界队列提取→完成后回执+EndOperation),Drop 回调立即返回;AppsFolder 提取在 UI STA 出帧执行(壳命名空间 API 不兼容 MTA);拒收路径全清理。file_drag_stack_contract.md§9.23(双轨细则+模态泵注记+已知未收口清单);§4.1/§6.2/§8.1.1a 三处历史勘误;zorder 坑[FR] 希望可以显示文件后缀名 #6 改写+坑widget architecture phase1 #10 新增。验证
已知未收口(契约 §9.23 登记 12 项债)
设置页自启开关 10s 阻塞、叠放弹窗重命名链、设置页辅助窗口入口、AppCompat 反馈通道(债⑫)、新 Outlook 拖附件改道(债⑨)、VirtualDrops 启动清扫(债⑩)、固定层被遮键盘丢失(债⑭)、.crdownload 移动防护(债⑬)等——均为存量或已登记待拍板项,明细见契约。