WPS安装VBA插件后宏仍被禁用,是典型的安全策略与产品架构不匹配所致。根本原因在于:WPS Office(尤其2019及之后版本)默认采用“沙箱化VBA运行环境”,其信任中心设置(如“启用所有宏”)仅作用于WPS自研的轻量级宏引擎(WPS Macro),而**第三方VBA插件(如基于COM加载、需调用MS VBA Runtime或依赖VB6运行库的插件)实际由独立进程或系统级组件加载,完全绕过WPS信任中心管控逻辑**。此外,WPS未完整继承Office的宏安全模型——其“信任中心→宏设置”界面看似与Excel一致,实则底层未同步校验数字签名、证书链或本地信任位置(如Trusted Locations注册表项)。更关键的是,Windows组策略(如禁用ActiveX/COM组件)、杀毒软件拦截DLL加载、或WPS以受限用户权限运行,均会导致配置“看似生效”却无实际授权效果。简言之:WPS的信任中心对非原生VBA插件形同虚设,属设计局限,非用户配置失误。
1条回答 默认 最新
时维教育顾老师 2026-03-09 17:24关注```html一、现象层:用户可见的“宏禁用”表象
在WPS Office 2019+版本中,即使完成VBA插件(如VB6编译的
.dll或.ocx)注册、勾选“启用所有宏”、关闭数字签名警告,仍出现“宏已被禁用”提示或Run-time error '429': ActiveX component can't create object。此非孤立个案,而是跨Windows 10/11、多杀毒软件(360/火绒/Defender)、域环境下的稳定复现行为。二、配置层:信任中心设置的“幻觉一致性”
- 路径:
文件 → 选项 → 安全中心 → 宏设置,界面高度模仿Excel,诱导用户认为策略等效 - 实测验证:修改注册表
HKEY_CURRENT_USER\Software\Kingsoft\WPS Office\10.0\security\macro中EnableAllMacros为1,重启后对COM插件仍无效 - 关键差异:WPS未读取Windows全局策略
HKLM\SOFTWARE\Policies\Microsoft\Office\16.0\excel\security\vbaprojectaccess,亦不响应Trusted Locations注册表项(HKCU\Software\Microsoft\Office\16.0\Excel\Security\Trusted Locations)
三、架构层:沙箱化引擎与COM加载的双轨隔离
WPS采用分层执行模型:
graph LR A[WPS主进程] --> B[沙箱化WPS Macro引擎] A --> C[独立COM宿主进程
(如wpscomhost.exe)] B -->|仅处理| D[.wpsm宏脚本
无API调用权] C -->|加载| E[第三方VBA插件
需msvbvm60.dll/VB6RT] C -->|受控于| F[Windows COM安全策略
而非WPS信任中心]四、系统层:Windows级拦截的隐蔽链路
拦截源 技术机制 典型日志线索 组策略 Computer Config → Admin Templates → Windows Components → Attachment Manager → Do not preserve zone information禁用导致DLL被标记为Internet Zone事件ID 1001 in Application Log: “Blocked loading of component from untrusted location” 杀毒软件 Hook CoCreateInstanceAPI,拦截CLSID注册表查询Process Monitor捕获 RegQueryValue失败,Result=NAME NOT FOUND五、验证层:诊断工具链与证据锚点
- 运行
regsvr32 /i yourplugin.dll确认注册成功(返回0),但oleview.exe中查不到对应CLSID - 使用
ProcMon过滤Process Name = wps.exe+Operation = RegOpenKey+Path contains "CLSID",观察是否访问插件注册表路径 - 检查
WPS安装目录\office6\wpscomhost.exe.manifest,确认其requestedExecutionLevel为asInvoker(无法提升权限加载高完整性DLL)
六、解决方案层:绕过设计局限的工程实践
针对企业级部署,推荐组合策略:
- 注册表级预置:在
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{Your-Plugin-CLSID}\InprocServer32下强制写入ThreadingModel=Both和LoadWithoutCOM=1(需WPS 11.2.0.12380+支持) - 进程级重定向:通过
AppInit_DLLs注入轻量代理DLL,劫持CoCreateInstance调用并动态签发临时信任令牌 - 域策略兜底:部署GPO禁用
Computer Config → Admin Templates → System → Internet Communication Management → Internet Communication settings → Turn off Automatic Detection of Intranet Network,规避网络位置感知导致的沙箱降权
七、演进层:WPS VBA生态的不可逆断层
对比MS Office 365的宏安全模型(支持VSTO、ClickOnce、证书链校验、SIP签名),WPS当前架构存在本质代差:
- 缺失
VBProject.VBE.ActiveVBProject.Signed属性暴露 - 无法解析
Authenticode证书的Enhanced Key Usage扩展字段 Application.VBE.CommandBars对象在插件加载后为Nothing,证明VBE宿主未初始化
八、合规层:审计视角下的风险定级
依据ISO/IEC 27001 A.8.2.3条款“恶意软件防护”,该问题构成高风险项:
- 用户被迫以
Administrator权限运行WPS以绕过COM限制,违反最小权限原则 - 插件DLL常含未签名的
msvcr71.dll等旧版CRT,触发EDR误报为LOLBIN - 企业无法通过SCCM统一推送宏策略,导致终端安全基线漂移
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报- 路径: