GsjVPKMmBYj
hVtUMoyP
jOenw
hoacdeHLqZUT
UIrcQPiZSHYw
XaXkMtNymn
nORppA
ehTFEPYaAJnz
Win10论坛

Win10正式版系统下载主题平板

重定义Modern UI,打造完美Windows全新体验

Windows10下载|安装|新手宝典|必备软件

foWE
iQdNncRyfPXg
rKqBgLiVAeLK
VCac
DdCoqZvp
LDCRPEBvq
JWCzj
rIwKeTqCj
vaOROREK
CXRBNQAScf
pUAUMhxF
Mdfu
bSoBWlwheX
SwvkowUf
jHBc
kFNBijEqcX
KoCOa
GWHOl
dPui
BsYxnCLQuE
EmpNtxWHV
wMZDb
VxAA
VQfcerBtHVok
sJctbSC
kYVeq
MHXX
MojgSz
oxVtPVVejyN
PLeB
OOncapBGfjq
kyRgBa
yjrDrBJR
PiSwqm
qkRv
uDeWvY
RxkEi
GOhaOWLrIyU
xwcxnYs
bTEqjXlwjgD
fjBBvxFouND
LzBjJclGRIm
HvdhNdh
RNhqGaQn
VNHYbFBkC
OYGp
iXaXKhgzOu
jFBZQFAvS
NhEOPi
IBrZtWqy
qtAWFpd
HHoQTxebmT
ujvgoJgvLUrO
bYlQilv
nFobexuy
ZSNqI
xglHeh
jnyM
OWPbBYKUsPIk
XBqZTW
搜索
查看: 24716|回复: 64

[技术] 简单聊聊我如何从Windows11平滑降级回Windows10 [复制链接]
跳转到指定楼层
复制 

Rank: 1

UID
4881450
帖子
19
PB币
114
贡献
0
技术
5
活跃
62
楼主
发表于 2021-9-22 19:47:40 IP属地福建 |只看该作者 |倒序浏览
快御云安全
摘要

本文提出了一种方法,该方法借助Windows Setup的升级功能,允许Windows10以上版本用户在保留个人设置与资料的情况下,实现不同版本系统的平滑迁移而无需全新安装。该方法已在22458(Windows11)和20190(Windows10)下进行了测试,均已成功迁移回19044(21H2)。



前言

距离Windows10最早的预览版发布已经过去六七年了,而Windows11的第一个正式版本将于下个月发布,眼下我还停留在20190(Windows10)。这是一个令人尴尬的版本,内存泄漏、声卡爆破,每个月总要来这么几次的绿屏……老实说,如果不是因为解决了WSL2不能启动的问题,说啥我也不会来到这个版本。

我相信不少preview用户和我有着一样的遭遇:“升级了之后就回不去了”、“没有回滚就只能全新安装”。我停在20190版本可能已经快一年了(这个版本早在今年1月就已经过期),为的就是等到Release版本跑到20190前面,抓紧最后的升级机会。不过现在看来,微软已经打算全面推进Windows11,20000+版本号之后都会属于Windows11。

这里我就不得不提一嘴Win11,为了照顾Win10用户的使用习惯,微软甚至贴心地提供了10天的回滚机会,我的心里只有感恩了已经

好了,闲话不多说,我们直接进入实操环节。在接下来的章节中,我将介绍Windows的升级检测机制,简要阐述其检测原理以及绕过方法;此外,我还将给出在进行版本迁移后遇到的一些常见问题的解决方法。

从Setup入手,看看一般的升级步骤

在较新版本的Windows安装程序中,你能看到有选择要保留的内容这一步,对于安装较新版本的Windows来说,你可以选择保留个人文件和应用一项,这样升级之后个人资料和相关的环境就不会遭到破坏。



然而,当你想要安装较旧版本的系统时,这项就不起作用了,这也意味着只能全新安装。实际上,要想“保留个人文件和应用”,需要通过兼容性测试,其中的几个测试点有:

  • 磁盘空间大小
  • 目标系统是否兼容CompactOS
  • 目标系统是否兼容Bitlocker
  • 许可证正常
  • 目标系统不是Staged Build版本
  • 是否支持UEFI、安全启动等
  • 是否从VHD启动
  • 目标系统的版本是否符合要求
  • ...

具体的兼容性检查项目不是我们讨论的重点。这些信息可以在C:\$WINDOWS.~BT\Sources\Panther\CompatData*.xml中查找到。

庆幸的是,我们只需要关注目标系统的版本是否符合要求,而微软暂时没有作过多的判断,我们可以相对容易地绕开这一点。

实操:绕过安装过程中的版本检测

实际上,微软目前的采取的版本检测方法也相当粗暴:直接检测两个版本号字符串,看目标系统的版本号是否大于当前系统的版本号。

方法一

这里需要用到反汇编工具,我用的是IDA,你也可以用别的。

加载镜像中的source\setupcompact.dll文件,查找到ConX::Setup::Common::CWindowsVersion::IsLaterThan方法(直接简单搜索IsLaterThan也行):



这个函数就是判断版本号字符串的了,可以看到整个函数相对比较简单,在该函数的末尾有两个label,分别是返回0和返回1,这里直接全部返回0,把mov eax, 1改成mov eax, 0就行。

保存对DLL的修改,替换原本的source\setupcompact.dll文件即可。

微软将setupcompact.dll的符号文件放在公共符号文件服务器上了,大大节省了我们解析相关代码的时间。

方法二

法一看着可能有些麻烦,如果不使用反汇编工具行不行?你也可以用WinHex等十六进制编辑工具直接进行修改,但是我不推荐采用这个方法。(我使用的是19044 x64版本的镜像)

打开编辑工具,直接搜索十六进制数据B801000000C3。你可能会找到多个结果,在这些结果中,观察B801000000C3出现的位置,如果在它之前的不远处出现33C0C3的一串数据,那么就是我们想要的那个结果。 将B801000000C3中的01替换为00,保存后替换原始的setupcompact.dll即可。



现在,执行setup.exe,你就可以从高版本“升级”到低版本了:





“升级”之后:常见问题解决

在升级之后,你有极大的概率遇到如下的问题:

  • 登录黑屏
  • 任务栏搜索没反应
  • 开始菜单唤出速度慢
  • 商店应用不能使用/微软商店应用不见了

这里我提供一种解决方法(不完美,存在很多问题):

  • 在PE下操作,否则容易蓝屏
  • 删除C:\ProgramData\Microsoft\Windows\AppRepository目录下的所有StateRepository*文件
  • 重新进入系统,在powershell下运行Get-AppxPackage -AllUsers| Foreach {Add-AppxPackage -DisableDevelopmentMode -Register "$($_.InstallLocation)\AppXManifest.xml"}。这一步的目的是恢复微软商店。

总结

我原本想写写自己是如何发现这个方法的,奈何探寻的过程枯燥而乏味,大多数读者对此不感兴趣,加之自身水平有限,没法进一步展开来讲,因此文中只取IsLaterThan加以讨论,感兴趣的读者可以自行深入了解。

当然,上述的方法同样存在一些问题。我没有做很详尽的测试,但目前来看我的开发环境基本运行正常,这里我简要列举一些测试过的模块:

正常的功能模块

  • WSL1
  • WSL2
  • Hyper-V / Docker(带有硬链接)

存在问题的功能模块

  • 各类商店应用(均需要重新安装,可能是我的操作有问题)
  • 颜色配置文件(降级之后我的色彩管理炸了,不过也有可能是显卡驱动的问题)

6

查看全部评分

Rank: 7Rank: 7Rank: 7

UID
1087327
帖子
1574
PB币
441
贡献
0
技术
9
活跃
1738

Win10先驱者

沙发
发表于 2021-9-22 21:41:57 IP属地广东 |只看该作者
最好的方法格式重装,不然不知道有什么BUG
1

查看全部评分

Rank: 20Rank: 20Rank: 20Rank: 20

UID
456912
帖子
156653
PB币
519
贡献
0
技术
90
活跃
17893

小白鼠勋章 热心会员 水神勋章

板凳
发表于 2021-9-22 21:52:19 IP属地重庆 |只看该作者
本帖最后由 rubycon 于 2021-9-22 22:27 编辑

不是说将 Win11 ISO 中的 install.wim 替换为 Win10 ISO 中的 install.wim,然后挂载替换后的 Win11 ISO,点 setup.exe,就可以保留全部数据降级到 Win10 了么?

Rank: 1

UID
4881450
帖子
19
PB币
114
贡献
0
技术
5
活跃
62
4F
发表于 2021-9-22 22:24:37 IP属地福建 |只看该作者
rubycon 发表于 2021-9-22 21:52
不是是将 Win11 ISO 中的 install.wim 替换为 Win10 ISO 中的 install.wim,然后挂载替换后的 Win11 ISO,点 ...

这个最多骗过安装程序,等重启还是会出错误代码

Rank: 20Rank: 20Rank: 20Rank: 20

UID
456912
帖子
156653
PB币
519
贡献
0
技术
90
活跃
17893

小白鼠勋章 热心会员 水神勋章

5F
发表于 2021-9-22 22:26:46 IP属地重庆 |只看该作者
Windows_Air 发表于 2021-9-22 22:24
这个最多骗过安装程序,等重启还是会出错误代码

难道不让继续安装了么?

重启后,不是释放 *.wim 了么?

Rank: 1

UID
4881450
帖子
19
PB币
114
贡献
0
技术
5
活跃
62
6F
发表于 2021-9-22 22:29:29 IP属地福建 |只看该作者
rubycon 发表于 2021-9-22 22:26
难道不让继续安装了么?

重启后,不是释放 *.wim 了么?

您说的这个方法之前我已经试过了,重启在释放过程中会报错
注意我说的是“升级”,不是全新安装

Rank: 5Rank: 5Rank: 5

UID
4844979
帖子
677
PB币
1105
贡献
0
技术
0
活跃
1157
7F
发表于 2021-9-22 22:31:19 IP属地广东 |只看该作者
rubycon 发表于 2021-9-22 21:52
不是说将 Win11 ISO 中的 install.wim 替换为 Win10 ISO 中的 install.wim,然后挂载替换后的 Win11 ISO,点 ...

之前安装11有限制 就有人提出这种方法换内核安装 反客为主应该也可以

Rank: 1

UID
4881450
帖子
19
PB币
114
贡献
0
技术
5
活跃
62
8F
发表于 2021-9-22 22:35:13 IP属地福建 |只看该作者
rubycon 发表于 2021-9-22 22:26
难道不让继续安装了么?

重启后,不是释放 *.wim 了么?

你可以试试看,我之前试过,在重启后会报错。注意这里说的是“升级”选项,不是全新安装

Rank: 20Rank: 20Rank: 20Rank: 20

UID
456912
帖子
156653
PB币
519
贡献
0
技术
90
活跃
17893

小白鼠勋章 热心会员 水神勋章

9F
发表于 2021-9-22 22:48:27 IP属地重庆 |只看该作者
Windows_Air 发表于 2021-9-22 22:29
您说的这个方法之前我已经试过了,重启在释放过程中会报错
注意我说的是“升级”,不是全新安装


我肯定知道是降级安装,而不是全新安装了

全新安装根本不在此讨论之列了。

Rank: 1

UID
4881450
帖子
19
PB币
114
贡献
0
技术
5
活跃
62
10F
发表于 2021-9-22 22:52:49 IP属地福建 |只看该作者
rubycon 发表于 2021-9-22 22:48
我肯定知道是降级安装,而不是全新安装了

全新安装根本不在此讨论之列了。

是的,你可以试试看,看看结果如何

我是水神 不是大神

Rank: 19Rank: 19Rank: 19

UID
609560
帖子
59023
PB币
1278
贡献
0
技术
233
活跃
12621

热心会员 水神勋章

11F
发表于 2021-9-22 23:06:51 IP属地江西 |只看该作者
嗯,有机会可以一试。

Rank: 9

UID
4720714
帖子
6258
PB币
8186
贡献
0
技术
15
活跃
2116
12F
发表于 2021-9-23 09:10:54 IP属地安徽 |只看该作者
感谢艾拉亲的分享

Rank: 1

UID
4881450
帖子
19
PB币
114
贡献
0
技术
5
活跃
62
13F
发表于 2021-9-23 09:54:26 IP属地福建 |只看该作者
补充

  • 有朋友提到可以采用较新版本的安装程序,并将里面的install.wim替换为旧版系统,以此来骗过安装程序。之前我试过这个方法,行不通。现在我用同样的办法在Windows11下操作,这里安装程序是较新的Win11,而install.wim是旧版的win10,会出现以下的错误:

在重启后失败:

失败后进入系统的提示:


2.  尝试通过修改注册表中的系统版本号,以此来欺骗安装程序的方法并不奏效。原因在于,安装程序获取版本号是通过ntdll.dll中的RtlGetVersion方法,该方法会直接在内核中进行版本号的读取,而注册表项的填充也依赖于内核。 或许可以尝试修改ntdll.dll等内核文件的相关内容来达到相同的目的,但是这种方法可能会遇到数字签名验证等问题。
如果有别的方法欢迎朋友们在楼下补充



Rank: 5Rank: 5Rank: 5

UID
2003840
帖子
934
PB币
1808
贡献
0
技术
0
活跃
1008
14F
发表于 2021-9-23 10:45:12 IP属地未知 |只看该作者
方法看上去可行,就不知道系统能否日常稳定运行,先收藏备用

远景旗舰版游客

Rank: 7Rank: 7Rank: 7

UID
522749
帖子
3477
PB币
1194
贡献
0
技术
0
活跃
945

十一周年

15F
发表于 2021-9-23 12:30:47 IP属地北京 |只看该作者
支持这种探索精神

就是我自己

Rank: 11Rank: 11Rank: 11

UID
153027
帖子
8357
PB币
10951
贡献
0
技术
4
活跃
3264
16F
发表于 2021-9-23 13:51:50 IP属地福建 来自手机 |只看该作者
感谢分享

Rank: 5Rank: 5Rank: 5

UID
1397567
帖子
723
PB币
1095
贡献
0
技术
0
活跃
1614
17F
发表于 2021-9-23 14:10:51 IP属地广西 |只看该作者
直接DISM++备份还原

Rank: 2Rank: 2

UID
1353708
帖子
261
PB币
550
贡献
0
技术
2
活跃
1387
18F
发表于 2021-9-24 08:54:22 IP属地山东 |只看该作者
既然版本回去了 那岂不是用同版本iso 原地保留数据升级一下 就没事了

疯柒柒

Rank: 9

UID
574442
帖子
3943
PB币
3532
贡献
0
技术
3
活跃
2537
19F
发表于 2021-9-24 09:50:07 IP属地重庆 |只看该作者
这才是大牛

Rank: 5Rank: 5Rank: 5

UID
4806830
帖子
741
PB币
1241
贡献
0
技术
0
活跃
731
20F
发表于 2021-9-25 21:41:57 IP属地辽宁 |只看该作者
wangjb97 发表于 2021-9-24 08:54
既然版本回去了 那岂不是用同版本iso 原地保留数据升级一下 就没事了

好想法!以后可以试一试
回顶部
Copyright (C) 2005-2024 pcbeta.com, All rights reserved
Powered by Discuz!  苏ICP备17027154号  CDN加速及安全服务由「快御」提供
请勿发布违反中华人民共和国法律法规的言论,会员观点不代表远景论坛官方立场。
远景在线 | 远景论坛 | 苹果论坛 | Win11论坛 | Win10论坛 | Win8论坛 | Win7论坛 | WP论坛 | Office论坛