|
本帖最后由 天使说请安静 于 2021-9-6 11:39 编辑
前两天看到 2010speedloong 大佬发布的教程
联想到BCDEDIT命令,想要尝试能不能做个隐藏物理分区的方式来启动VHDX系统并实现一键还原
瞎折腾老久实现了.分享一下,如果能给大家新思路更好.
用的是原版的镜像,标卷为Acer的分区没有隐藏,只是删除了盘符.原本的盘符是D,我把它关到文件夹里面去了:(echo select vol D&assign mount=C:\windows\system\vhdx)|diskpart
批处理代码↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
@echo OFF
setlocal enabledelayedexpansion
set FR=%~dP0
SET B=boot1
del %FR%boot1.vhdx
del %FR%boot2.vhdx
if exist %FR%boot1.vhdx set B=boot2
for /f "tokens=2 delims==" %%i in ('bcdedit ^/ENUM ^{ffffffff-0000-0000-0000-ffffffffffff^}^|findstr partition') do set HV=%%i
echo create vdisk file=%FR%%B%.VHDX parent=%FR%beas.VHDX|DISKPART
BCDEDIT /create {ffffffff-0000-0000-1111-ffffffffffff} /d "WINDOWS 10" /application OSLOADER
BCDEDIT /SET {ffffffff-0000-0000-1111-ffffffffffff} device VHD=[%HV%]\%B%.VHDX
BCDEDIT /SET {ffffffff-0000-0000-1111-ffffffffffff} osdevice VHD=[%HV%]\%B%.VHDX
BCDEDIT /SET {ffffffff-0000-0000-1111-ffffffffffff} path \Windows\system32\winload.efi
BCDEDIT /SET {ffffffff-0000-0000-1111-ffffffffffff} description "WINDOWS 10"
BCDEDIT /SET {ffffffff-0000-0000-1111-ffffffffffff} locale zh-CN
BCDEDIT /SET {ffffffff-0000-0000-1111-ffffffffffff} systemroot \Windows
BCDEDIT /SET {ffffffff-0000-0000-1111-ffffffffffff} nx OptIn
BCDEDIT /SET {ffffffff-0000-0000-1111-ffffffffffff} detecthal Yes
BCDEDIT /SET {bootmgr} default {ffffffff-0000-0000-1111-ffffffffffff}
ECHO 系统将在重启时恢复。
PAUSE
↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
实测 device/osdevice地址如果直接用 C:\windows\system\vhdx 会直接引导失败X^X
for /f "tokens=2 delims==" %%i in ('bcdedit ^/ENUM ^{ffffffff-0000-0000-0000-ffffffffffff^}^|findstr partition') do set HV=%%i 这个命令是为了获取VHDX的路径,我不知道这是啥格式....它不是绝对的,如果接着别的存储设备进系统它会变化.
{ffffffff-0000-0000-0000-ffffffffffff}是我之前手动创建WinRE的SDI路径,它是跟VHDX在同一个目录的.
设备选项
--------------
标识符 {ffffffff-0000-0000-0000-ffffffffffff}
description Windows Recovery
ramdisksdidevice partition=\Device\HarddiskVolume3
ramdisksdipath \Recovery\WindowsRE\boot.sdi
成品跟这个差不多了,主要是识别隐藏分区的路径
然后如果两个VHDX都有问题导致无法引导的问题可以把WinRE的引导项加进BCD的启动列表:
bcdedit /set {bootmgr} displayorder {current} {winRE的ID}
bcdedit /set {bootmgr} timeout 0
这样如果发生某些不可描述的BUG导致两个VHDX都不见了的话,可以自动引导WinRE,而且不会显示bootmgr菜单.
|
评分
-
查看全部评分
|