assocprovider.dll 是 Windows 中隶属于 Shell 子系统的系统级动态链接库,通常位于 %SystemRoot%\System32。它并不是普通程序会主动调用的运行库,而是以进程内 COM 服务器(In-Proc COM Server)形态存在、由资源管理器与“默认程序”控制面板按需加载的关联提供程序(Association Provider)。其职责是把散落在注册表中的文件关联数据抽象为统一接口,再向上层 Shell 组件输出。
将 HKEY_CLASSES_ROOT 下的扩展名键、ProgID 键以及 HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts 中的用户级覆盖键统一解析为“扩展名 → 应用 → 启动命令”的映射关系,为 IQueryAssociations、ShellExecuteEx 等调用链提供一致的解析结果。
作为“设置默认程序”控制面板与 SPAD(Set Program Access and Defaults)的数据源与写入通道,负责维护 OpenWithProgids、OpenWithList、UserChoice 等键值,并同步处理 http、mailto 等协议关联。
自 Windows 8 起,UserChoice 子键需携带基于用户 SID 与扩展名生成的 Hash 校验值。assocprovider.dll 参与该值的生成与验证,使第三方程序无法绕过用户意图静默劫持默认关联。
区分机器级(HKLM,只读基线)与用户级(HKCU,可覆盖)关联,保证多用户环境下各自的默认程序互不干扰;同时向 Shell 提供类型描述、图标及谓词(verb)信息。
sfc /scannow 与 DISM /Online /Cleanup-Image /RestoreHealth 尝试从组件存储中恢复,再确认 %SystemRoot%\System32 下文件的数字签名与版本号同系统版本匹配,避免从第三方站点下载同名 DLL 覆盖系统文件。