解读 WCP 环境
環(huán)境
WCP.dll
Windows Componentization Platform Servicing API
6.3.9600.16384
10.0.10240.16384
10.0.10240.16565
這里的版本并不重要。
原先是用的第一個(gè)版本,即 win8.1 中的文件。
后來(lái)在處理增量壓縮時(shí),發(fā)現(xiàn) Win10 中增量壓縮的格式比 Win8.1 有所增加,因此,就改用了 Win10 中的文件了。
本著越新越好的原則,最終選定了率三個(gè)版本。
版本一旦選定,就很難再改了。
這是由于我們調(diào)用的是系統(tǒng)未導(dǎo)出的函數(shù),直接調(diào)用函數(shù)的地址;而不同版本的函數(shù)是不一樣的,10.0.10240.16565 是當(dāng)時(shí)的最新版本,后面有新的版本,也不能再換了。
文件在 \Windows 下WinSxs 下x86_microsoft-windows-servicingstack_31bf3856ad364e35_10.0.10240.16384_none_b5413773a99a53d2 目錄下。
實(shí)際上,如果系統(tǒng)是 64 位,系統(tǒng)真正使用的并不是這個(gè)目錄,而是 amd64_microsoft-windows-servicingstack_31bf3856ad364e35_10.0.10240.16384_none_115fd2f761f7c508。
兩者肯定是有區(qū)別的,但主體功能是相似的,研究問題,當(dāng)然是從簡(jiǎn)單、方便入手,因此,我們主要使用 32 位的文件進(jìn)行,配合使用 64 位的文件。后面我們會(huì)看到,有些 32 位的函數(shù)已經(jīng)優(yōu)化成了函數(shù)聲明。
WinSxs 稱為 Side-by-side assemblie,后面再詳細(xì)介紹。
在 WinSxs 下的目錄成千上萬(wàn),目錄名基本上都像上面的這兩個(gè),看著讓人眼暈。
要知道這些名稱的組成,參看文件名解析。
WCP.dll 雖然稱為 API,但是,并未提供必要的文檔,連頭文件也沒有。好在從網(wǎng)上發(fā)現(xiàn)了 ida 工具,好在微軟還是提供了符號(hào)文件,才算真正找到了解決問題的正確方向。
即便是這樣,難度還是很大的。光是 WCP.dll 一個(gè)文件,其中的函數(shù)就有 8400 多個(gè)。
再到后來(lái),發(fā)現(xiàn) WCP.dll 并不是主程序,但不影響我們對(duì)系統(tǒng)的理解,以及修復(fù)系統(tǒng)。
總結(jié)
- 上一篇: WCP知识管理系统OpenOffice乱
- 下一篇: 参数化的RBAC模型