WINDOWS 应用程序兼容性引擎的关键组件
acgenral.dll 全称 Application Compatibility General Library,隶属于 Windows 应用程序兼容性基础架构(Application Compatibility Infrastructure,AppCompat)。该文件通常存放于 C:\Windows\System32 与 C:\Windows\SysWOW64 目录下,64 位与 32 位版本并存。它并不是普通程序的依赖库,而是兼容性引擎在运行期装载的“垫片执行器”,负责把旧程序的行为请求转换成当前 Windows 内核能够接受的形式。
acgenral.dll 内部实现了大量通用垫片代码,例如 Version Lie(版本伪造)、EmulateHeap、ForceCopy 等。当目标程序的兼容性标记被触发时,兼容性引擎(apphelp.dll)会将 acgenral.dll 注入该进程,由它把垫片逻辑挂钩到对应的系统 API 上,从而改变程序调用系统服务时的实际行为。
许多旧程序会通过 GetVersionEx、VerifyVersionInfo 等接口探测系统版本,一旦发现版本过新便拒绝启动。acgenral.dll 会拦截这类调用并返回伪造的版本号,使程序误以为运行在 Windows XP 或 Windows 7 环境中,进而绕过版本检查顺利执行。
对于试图向 Program Files、Windows 目录或 HKEY_LOCAL_MACHINE 写入数据的旧程序,acgenral.dll 配合用户账户虚拟化机制,将写操作重定向到用户配置目录下的 VirtualStore 以及 HKCU 中的虚拟注册表项。这样既保证程序正常运行,又避免系统文件与全局配置被破坏。
针对 DirectDraw、Direct3D 的旧接口以及高 DPI 缩放场景,acgenral.dll 提供显示模式仿真、颜色深度转换与窗口消息兼容处理,使早期游戏和图形程序在新版 Windows 上仍能正常渲染与显示。
acgenral.dll 本身不包含判断规则,具体规则存放在系统兼容性数据库(如 sysmain.sdb)中。运行期由 SdbApi 查询匹配结果,acgenral.dll 再依据结果加载相应垫片,形成“数据库匹配 + 运行期执行”的两段式结构。