WCP.dll
Windows Componentization Platform Servicing API
6.3.9600.16384
10.0.10240.16384
10.0.10240.16565
这里的版本并不重要。
原先是用的第一个版本,即 win8.1 中的文件。
后来在处理增量压缩时,发现 Win10 中增量压缩的格式比 Win8.1 有所增加,因此,就改用了 Win10 中的文件了。
本着越新越好的原则,最终选定了率三个版本。
版本一旦选定,就很难再改了。
这是由于我们调用的是系统未导出的函数,直接调用函数的地址;而不同版本的函数是不一样的,10.0.10240.16565 是当时的最新版本,后面有新的版本,也不能再换了。
文件在 \Windows 下WinSxs 下x86_microsoft-windows-servicingstack_31bf3856ad364e35_10.0.10240.16384_none_b5413773a99a53d2 目录下。
实际上,如果系统是 64 位,系统真正使用的并不是这个目录,而是 amd64_microsoft-windows-servicingstack_31bf3856ad364e35_10.0.10240.16384_none_115fd2f761f7c508。
两者肯定是有区别的,但主体功能是相似的,研究问题,当然是从简单、方便入手,因此,我们主要使用 32 位的文件进行,配合使用 64 位的文件。后面我们会看到,有些 32 位的函数已经优化成了函数声明。
WinSxs 称为 Side-by-side assemblie,后面再详细介绍。
在 WinSxs 下的目录成千上万,目录名基本上都像上面的这两个,看着让人眼晕。
要知道这些名称的组成,参看文件名解析。
WCP.dll 虽然称为 API,但是,并未提供必要的文档,连头文件也没有。好在从网上发现了 ida 工具,好在微软还是提供了符号文件,才算真正找到了解决问题的正确方向。
即便是这样,难度还是很大的。光是 WCP.dll 一个文件,其中的函数就有 8400 多个。
再到后来,发现 WCP.dll 并不是主程序,但不影响我们对系统的理解,以及修复系统。