飘在云端

啊!那蓝真天,白真云!

· 备查 · · 1925次浏览

RollBack Rx Pro 11.2 shield.sys驱动蓝屏及卸载过程

  • 前言

    我的Rollback Rx Pro 11.2 使用了4个月,期间系统和软件做了一些重大变更,不同快照不断差分合并,即使经过空间优化,只保留2个快照的情况下,快照空间占用了将近 300 G,我使用的RollBack Rx Pro 的内核模式是 快速还原模式。

请输入图片描述

    因为系统盘比较小,打算彻底释放一下,我是全部硬盘都保护的,1个 256G 固态 + 1个 RAID0 (2x2TiB)机械硬盘,于是暂停保护,暂定保护之后会删除所有快照,重新开启保护,将把当前系统状态保存为初始快照,从而释放空间。
    为了准备这个完美的系统状态,我更新了win10补丁,优化了一些软件设置和系统设置,清理了系统垃圾,这个可能是个伏笔。
    因为数据量比较大(300G),暂停保护等于把原始数据真正的写入到硬盘扇区,期间用了半小时才走完进度条, 然后灾难来了。

  • 蓝屏

    重启电脑,在登陆windows用户阶段,就是输入用户名和密码才能进入系统桌面那里,会蓝屏,报 shield.sys 的蓝屏错误,很明显这个是RollBack Rx Pro相关的底层磁盘过滤驱动,重启了很多次,在输入用户名密码或者登录到桌面的这2个地方蓝屏。

  • 尝试

     当时我怀疑是windows10 更新惹的锅,于是在win10启动修复菜单出现之后,把质量更新和功能性更新全部删了,结果继续报错。
     进入安全模式同样蓝屏,启动到PE下面,通过DISM++禁用shield.sys及包含shie关键字的几个驱动,还有shd关键字的服务,重新正常启动windows,报错代码改变为inaccessible boot device很明显Rx和系统紧密关联,不能这么简单粗暴。

    而RollBack的子系统,在暂停保护的时候就没了,因为暂停保护之后,所有数据不经过过滤和重定向写到原始扇区,保护状态下,RollBack会用自己的UEFI启动文件来接管系统真实的UEFI文件,子系统要从Rx的UEFI启动文件才能进入的,暂停保护之后,RollBack会还原系统的真实UEFI启动文件,然后删除接管系统的的替身UEFI。

  • 解决

    Rollback 的子系统也没了,可以说是山穷水尽,还好我当时为了降低系统资源占用,修改了Rx的一些默认安装设置,其中一个是系统加密,我当时改成了无,此时有了一线生机
    因为关闭了快照加密保护,PE下的windows所有磁盘分区都是真实原始状态,可读可写,我进入Rx的安装目录,此时看到了一个600Mib+的.dat结尾的数据文件,此前我是雨过天晴/EAZ-FIX等的重度用户,对他们的原理比较了解,也研究过他们的相关安装目录下的一些文件,推测这里记录了Rx重定向前的扇区/引导等真实原始信息,我尝试启动自带安装程序卸载,成功运行,并成功卸载(假装)!!
    之后正常进入系统,发现Rx卸载了一部分。

因为PE下启动卸载程序,所以并没卸载完整,大约能正常进入几次系统,之后还会蓝屏的,所以继续PE下操作,处理注册表残留,这个比较繁琐,也需要耐心甄别,处理完之后才能卸载干净。

搜索用到的关键字
shdbus.sys
Shdump.sys
shield.sys
shieldf.sys
shieldm.INF
shieldm.sys
shieldmamd64.cat
ShdServ
C:\Program Files\Shield\
New Horizon Datasys Inc
Horizon DataSys Inc
RollBack Rx Professional
shdservps.dll
ShdExt
ShdExt Extensions

启动PE,使用Registry Workshop 载入配置单元  C:\Windows\System32\config\system,我这里挂载到PE下的注册表路径:HKEY_LOCAL_MACHINE\fix1
1.处理shdbus
HKEY_LOCAL_MACHINE\fix1\ControlSet001\Control\Class\{4d36e967-e325-11ce-bfc1-08002be10318}
LowerFilters 字符串类型,值内容是
Shdbus
EhStorClass
删除LowerFiters第一行的Shdbus,移除Rx的过滤驱动,后面内容移到第一行的位置

删除shdbus服务
HKEY_LOCAL_MACHINE\fix1\ControlSet001\Services\Shdbus

2.处理shdump
HKEY_LOCAL_MACHINE\fix1\ControlSet001\Control\CrashControl
 DumpFilters 字符串类型,值内容是
Shdump.sys
dumpfve.sys
删除DumpFilters第一行的Shdump.sys,继续移除rollback的过滤驱动,原第二行的dumpfve.sys保留,移至第一行

3.处理shield
HKEY_LOCAL_MACHINE\fix1\ControlSet001\Control\Class\{4d36e967-e325-11ce-bfc1-08002be10318},
UpperFilters 字符串类型,值内容是
Shield
hrdevmon
partmgr
删除UpperFilters 第一行的Shield,原第二三行的移至一二行
HKEY_LOCAL_MACHINE\fix1\ControlSet001\Control\Session Manager\Environment,
Path 字符串类型
删除里面包含的RollBack Rx Pro 安装路径的环境变量,如我这里是 C:\Program Files\Shield\
 C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\Program Files\Shield\;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Users\administrator\AppData\Local\Microsoft\WindowsApps;C:\adb
删除RollBack 添加的windows自带防火墙添加的规则
HKEY_LOCAL_MACHINE\fix1\ControlSet001\Services\SharedAccess\Parameters\FirewallPolicy\FirewallRules, {208545C3-B056-4F6C-BE6E-065BBA084502}, v2.30|Action=Allow|Active=TRUE|Dir=Out|App=C:\Program Files\Shield\shdserv.exe|Name=RollBack Rx Professional|
只用删除名为防火墙规则的字符串就好了,如这里是删除 {208545C3-B056-4F6C-BE6E-065BBA084502},这个字符串名字可能每个人都有所不同
删除shield服务
HKEY_LOCAL_MACHINE\fix1\ControlSet001\Services\Shield
4.删除shieldf服务
HKEY_LOCAL_MACHINE\fix1\ControlSet001\Services\Shieldf
5.删除shieldm服务
HKEY_LOCAL_MACHINE\fix1\ControlSet001\Services\Shieldm


6.载入配置单元 C:\Windows\System32\config\software,我这里挂载到的PE下的注册表路径:我这里挂载到PE下的注册表路径:HKEY_LOCAL_MACHINE\fix2
删除相关安装信息残留
HKEY_LOCAL_MACHINE\fix2\Microsoft\Windows\CurrentVersion\Uninstall\Shield
HKEY_LOCAL_MACHINE\fix2\Shield
HKEY_LOCAL_MACHINE\fix2\Classes\AppID\ShdServ.EXE

删除这个路径下的shield
HKEY_LOCAL_MACHINE\fix2\Microsoft\Windows\CurrentVersion\Explorer\StartupApproved\Run
键值名为 Shield ,数据类型为 REG_BINARY

搜索 shdserv.exe 关键字,把结果包含此路径下HKEY_LOCAL_MACHINE\fix2\Classes\CLSID\的CLSID的注册表项删除

下面是我用到的一些CLSID,可能每个人会不一样
{425EC3D3-31E6-4369-8241-556187FC7A9D}
{C17FED9F-5F21-4955-A572-FA22FDDB38E7}
{C20B0F44-2F31-458A-9A96-ABF947A596A0}
{A456E977-3F48-41AC-B170-DDE187744DE2}
{6DF31A51-4E4D-4B4A-A30A-D8E9C4026297}
{4ED6CF18-A58C-436A-A52C-C507DAD7DE24}
{8436EBDA-BDD4-4C46-B3F6-A62F97A7F762}

在你挂载software的路径下,搜索 “ShdServ.Shield ”关键字,不包含引号,如我这里挂载software的路径是 HKEY_LOCAL_MACHINE\fix2
记录下此路径 HKEY_LOCAL_MACHINE\fix2\Classes\ShdServ.Shield\CLSID 下面的默认数值内容
我这里是 {425EC3D3-31E6-4369-8241-556187FC7A9D},用这个默认值内容作为关键字继续搜索相关结果,并删除
同理定位到此路径:HKEY_LOCAL_MACHINE\fix2\Classes\ShdExt.ShdMenuExt\CLSID,记录下面的默认数值内容,用这个默认值内容作为关键字继续搜索相关结果,并删除相关结果
我这里是 {4ED6CF18-A58C-436A-A52C-C507DAD7DE24}

在删除相关的搜索结果中,如果搜索到了注册表项而不是单个键值,注意展开目录,查看里面的数据时候有新的关联的CLSID
如:我用HKEY_LOCAL_MACHINE\fix2\Classes\ShdExt.ShdMenuExt\CLSID下面的默认值内容作为关键值搜索,其中有一项是注册表项
展开它发现下面有个TypeLib,应该是相关支持库ID,记录它的默认值内容,我这里是{C20B0F44-2F31-458A-9A96-ABF947A596A0},同样作为关键字继续搜索,删除相关结果
HKEY_LOCAL_MACHINE\fix2\Classes\CLSID\{4ED6CF18-A58C-436A-A52C-C507DAD7DE24}\TypeLib

删除
HKEY_LOCAL_MACHINE\fix2\Classes\ShdExt.ShdMenuExt
HKEY_LOCAL_MACHINE\fix2\Classes\ShdExt.ShdMenuExt.1
HKEY_LOCAL_MACHINE\fix2\Classes\*\shellex\ContextMenuHandlers\ShdExt

删除下面的注册表项时,记录下里面的默认值内容,作为关键字继续搜索相关内容,并删除,我这里是{4ED6CF18-A58C-436A-A52C-C507DAD7DE24}
HKEY_LOCAL_MACHINE\fix2\Classes\Directory\shellex\ContextMenuHandlers\ShdExt

删除此路径下,键值内容是"ShdExt Extensions" 的结果,不含引号
HKEY_LOCAL_MACHINE\fix2\Microsoft\Windows\CurrentVersion\Shell Extensions\Approved 
我这里是{4ED6CF18-A58C-436A-A52C-C507DAD7DE24}

搜索 shdservps.dll 关键字,删除相关结果
HKEY_LOCAL_MACHINE\fix2\Classes\CLSID\{A456E977-3F48-41AC-B170-DDE187744DE2}

搜索 ShdServ 关键字,删除在此路径下:HKEY_LOCAL_MACHINE\fix2\Classes\AppID\   包含ShdServ 的关键字结果
如我这里是 HKEY_LOCAL_MACHINE\fix2\Classes\AppID\{6DF31A51-4E4D-4B4A-A30A-D8E9C4026297}

HKEY_LOCAL_MACHINE\fix2\Microsoft\Windows\CurrentVersion\Shell Extensions\Approved

收尾工作,删除下面注册表项,没有就说明之前的步骤已经清理了
HKEY_LOCAL_MACHINE\fix2\Classes\ShdServ.Shield
HKEY_LOCAL_MACHINE\fix2\Classes\ShdServ.Shield.1
HKEY_LOCAL_MACHINE\fix2\Classes\Interface\{BC1F0D15-8908-47B7-8B5C-312755B4861B}
HKEY_LOCAL_MACHINE\fix2\Classes\TypeLib\{C20B0F44-2F31-458A-9A96-ABF947A596A0}
HKEY_LOCAL_MACHINE\fix2\Classes\WOW6432Node\Interface\{BC1F0D15-8908-47B7-8B5C-312755B4861B}

HKEY_LOCAL_MACHINE\fix2\Classes\Interface\{8436EBDA-BDD4-4C46-B3F6-A62F97A7F762}
HKEY_LOCAL_MACHINE\fix2\Classes\Interface\{BC1F0D15-8908-47B7-8B5C-312755B4861B}
HKEY_LOCAL_MACHINE\fix2\Classes\Interface\{A456E977-3F48-41AC-B170-DDE187744DE2}

这样注册表残留就清理完了,接下来能正常进入系统了,清理rx安装目录残留,以及开始菜单的快捷方式残留

如果还不放心,可以多做一步,使用RollBack Rx Pro 的安装程序再次安装一次,然后使用自带安装程序正常卸载一次。


    这个暂停保护后的蓝屏我到现在还不清楚怎么回事,以前我也暂停过,当时暂停完能进入系统的。

    对此我的推测是,因为这次时隔4个月,跨度较大,系统关键更新变更太多,我更新过3次系统,功能性、安全更新都有,而Rx 的版本是2020.7月份的版本,而此时官网的最新版本是2020.10月发布的,可能是版本支持问题导致的蓝屏。

    另一个推测是,Rx的设置有一个选项:允许安装无法被回滚的windows功能性更新,我当时给它打钩了,然后还是安装了功能性更新,这个可能最接近真相吧,虽然它说不支持,但是我还是安装了,期间也回滚到其他快照几次,没发现问题,没想到这次暂停保护,初始化快照就GG了,查了帮助文件,这个选项还有另一个意思,如果安装了无法被Rx回滚的windows功能性系统更新补丁,Rx会自动暂停保护,删除所有快照,写入到原始数据里面,但是我期间装了几次功能性补丁没发现问题,Rx并没有自动暂停保护并把功能性更新写入到原始数据,也能正常创建回滚快照,所以没太在意。

    如果你当时是使用默认设置的话,默认是打开了系统加密,加密选项是有3个级别的,一个是无加密,一个是加密系统及资料,一个是快照加密。你可以在PE下看看是否有磁盘出现,能否读写,如果能,那么就有救了,如果不能,可能只能重装系统了,或者其他办法。

    Rx这类快照类软件解决了数据持久性问题,设计思想有Git那个版本管理的味道,正因此,比shadows defender、冰点还原精灵之类好用的太多,更灵活,那些普通还原软件无法解决数据持久性问题,数据都是临时定向到空白扇区的,要么重启后保存,要么只能消失,都是不可逆,局限太大了。

另外一个特别说明,如果Rx遇到非法关机,比如断电/死机/蓝屏等,系统磁盘自检请一定要跳过,如果还没遇到过这个情况,先自行把非法关机的磁盘自检给取消。