无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
查看: 11466|回复: 155
打印 上一主题 下一主题

[发布] 确定当前pe 对应的 boot.wim 位置,基本解决

  [复制链接]
跳转到指定楼层
1#
发表于 2022-11-2 19:08:23 | 显示全部楼层 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 dos时代菜鸟 于 2022-11-7 08:28 编辑

如题,有啥办法能 获取到 当前 pe 是启动的 哪个位置的 哪一个 boot.wim ?


弄了个 pecmd 的脚本,用 pecmd.exe load 这个脚本,在pe下就能获取 到了,当然,一些特殊情况 可能还需要进一步测试,或许 无解。

特此鸣谢   D_M_GuYing  的辛勤测试


原理是读取 注册表 HKLM\SYSTEM\CurrentControlSet\Control\SystemStartOptions 的键值并通过 api 将其变成 人能看懂的 路径。

boot.wim.Path-2.81.7z (939.74 KB, 下载次数: 50)

为了避免 未分配盘符,可以 先运行盘符理顺脚本,把win 能识别的卷 统统挂载。

针对 cdrom 的情况,只能考虑 在多个 光驱中 按照boot.wim 的路径去找,找到的,就认定为是目标,此时如果有多个结果,取最后一个。一般情况下,光驱用的很少,大多是虚拟光驱启动pe ,光驱序列里面不会有两个一样的光盘内容,如果是一样的,也就无所谓选择哪一个了。

支持 vhd 的情况  
//优先采纳 wim 路径,vhd 路径次之。如果 都不具备搜索条件,out_path 变量为空。
上几个图:













2#
 楼主| 发表于 2022-11-3 07:42:44 | 显示全部楼层
有些外置 程序与 启动 boot.wim 并列放置,也可以把必要的 配置文件 与之并列放置,如果能明确找到  boot.wim 的位置,在pe启动时 调取外部设置或者外置资源就相对准确和容易一些。不用 forx 搜索。维护pe 也更容易一些。
回复

使用道具 举报

3#
 楼主| 发表于 2022-11-3 10:47:11 来自手机 | 显示全部楼层
610644034 发表于 2022-11-3 07:52
可以,注册表里面有卷浩和文件路径及文件名。但是如果是移动盘,后面你知道的:找不到卷和文件。
给你一个 ...

你这也是个办法,我去研究下
回复

使用道具 举报

4#
 楼主| 发表于 2022-11-3 10:54:51 来自手机 | 显示全部楼层
用 dism 能不能获取呢?
回复

使用道具 举报

5#
 楼主| 发表于 2022-11-3 15:48:25 | 显示全部楼层
正常情况下读取注册表
cmd 下运行
reg query HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control /v SystemStartOptions

可以获得。

具体分区 转换为 盘符或者 volumn 表达方式,需要 pecmd调用 api 实现。
回复

使用道具 举报

6#
 楼主| 发表于 2022-11-3 16:51:47 来自手机 | 显示全部楼层
chiannet 发表于 2022-11-3 11:23
USBOS 比较生硬地解决办法是:每次创建boot.wim前,生成一个20-30位随机字符串,把这个字符串做文件名的0字 ...

不知道那些 特殊分区或者特殊启动的boot.wim 能否通过注册表方式找到。
回复

使用道具 举报

7#
 楼主| 发表于 2022-11-3 18:51:23 | 显示全部楼层
答案 在一楼,
通常情况下 是 能够解决的。
回复

使用道具 举报

8#
 楼主| 发表于 2022-11-3 20:57:33 | 显示全部楼层
本帖最后由 dos时代菜鸟 于 2022-11-3 21:15 编辑

鼓捣出个 支持 vhd 和 wimboot+vhd 的,需要 dism 支持。
也不知道 特殊情况下 能不能识别。


以后可以考虑的设计:

如果 wim 路径有效,只是 没有分配盘符,可以考虑 用 pecmd 给分一个


目前看,还是先解决获取信息准确度的问题。

回复

使用道具 举报

9#
 楼主| 发表于 2022-11-3 21:09:47 | 显示全部楼层
如果这个 具有一定的通用性,那么 pe 的 wim 里的配置文件就都可以外移出去,方便各种启动配置和维护。
回复

使用道具 举报

10#
 楼主| 发表于 2022-11-3 21:42:32 来自手机 | 显示全部楼层
527104427 发表于 2022-11-3 21:28
wim位于CDROM就不行。
实测multi(0)disk(0)cdrom(0)有可能对应的是cdrom 1

嗯嗯,看来还需要考虑 不是硬盘卷的情况。
回复

使用道具 举报

11#
 楼主| 发表于 2022-11-3 22:16:31 来自手机 | 显示全部楼层
527104427 发表于 2022-11-3 21:28
wim位于CDROM就不行。
实测multi(0)disk(0)cdrom(0)有可能对应的是cdrom 1

有啥办法 把 它转为 pecmd 的 part 命令能用的格式么?
回复

使用道具 举报

12#
 楼主| 发表于 2022-11-3 22:43:35 | 显示全部楼层
527104427 发表于 2022-11-3 21:28
wim位于CDROM就不行。
实测multi(0)disk(0)cdrom(0)有可能对应的是cdrom 1

我这边 multi(0)disk(0)cdrom(0) 是cdrom2
回复

使用道具 举报

13#
 楼主| 发表于 2022-11-3 23:10:50 | 显示全部楼层
527104427 发表于 2022-11-3 23:00
我也不会编程,会的话就可以搞搞。
论坛也有几个会编程的,但又不屑玩PECMD,呵呵。

发现 pecmd 给 cdrom0~n 赋予 盘符时, %cdrom0% 盘符 对应上了 multi(0)disk(0)cdrom(0),不知道是否巧合
回复

使用道具 举报

14#
 楼主| 发表于 2022-11-3 23:22:58 | 显示全部楼层
527104427 发表于 2022-11-3 23:00
我也不会编程,会的话就可以搞搞。
论坛也有几个会编程的,但又不屑玩PECMD,呵呵。

"ENVI *"(省略名称和值)表示将光驱的盘符以CDROM0、CDROM、CDROM1、CDROM2 等写入系统环境变量。
回复

使用道具 举报

15#
 楼主| 发表于 2022-11-4 07:08:39 | 显示全部楼层
本帖最后由 dos时代菜鸟 于 2022-11-4 07:47 编辑
D_M_GuYing 发表于 2022-11-4 04:37
VM下,测试,光驱启动,我的C盘下,并没有WEPE.WIM,文件在ESP分区里

我也在试图解决这个问题,不过我的 ...

multi(0)disk(0)rdisk(0)partition(1)
不一定就是 第一硬盘 第1分区。

RDPATH=MULTI(0)DISK(0)RDISK(2)PARTITION(4)
也不一定是 第2硬盘 的 第4分区。

这个结果 与 pecmd 的 disk /part 指令引用的 硬盘号 和 分区号 不对等,这个 表达是用 ntdll.dll 得出的。


回复

使用道具 举报

16#
 楼主| 发表于 2022-11-4 07:17:09 | 显示全部楼层
527104427 发表于 2022-11-3 23:28
原则上是对应的,但注册表的符号链接不按常理出牌,这就不对应了

确实 对不上,如果中间变化了,就 不行了。
回复

使用道具 举报

17#
 楼主| 发表于 2022-11-4 07:19:12 | 显示全部楼层
D_M_GuYing 发表于 2022-11-4 04:37
VM下,测试,光驱启动,我的C盘下,并没有WEPE.WIM,文件在ESP分区里

我也在试图解决这个问题,不过我的 ...

目前光盘启动 是 会出错,你先试试 boot.wim 在硬盘的情况

点评

实机测试,两块SSD,分别安装PE并启动,无论是否在隐藏分区,我的这段代码都能分配盘符和准确定位, 再多硬盘的情况就没条件测试了 IFEX %temp%\3.INI, { LOAD %temp%\3.INI DISK ,%RDISK%,%PARTITION%  详情 回复 发表于 2022-11-4 08:27
回复

使用道具 举报

18#
 楼主| 发表于 2022-11-4 09:07:19 | 显示全部楼层
又更新了一下,适用 cdrom 的状态了。
最好 先运行 盘符整理,把没有盘符的win可识别分区都按顺序 分配了盘符。

回复

使用道具 举报

19#
 楼主| 发表于 2022-11-4 09:17:46 | 显示全部楼层





回复

使用道具 举报

20#
 楼主| 发表于 2022-11-4 09:31:11 | 显示全部楼层
本帖最后由 dos时代菜鸟 于 2022-11-4 09:34 编辑
D_M_GuYing 发表于 2022-11-4 08:27
实机测试,两块SSD,分别安装PE并启动,无论是否在隐藏分区,我的这段代码都能分配盘符和准确定位,
再 ...

是这样理解么? x.7z (454 Bytes, 下载次数: 0)


记得 脚本区 有一个关于 这个理解的讨论,这样理解 会有偏差的。 不是一个 api 生成的 分区表达式,必须 转换下,机械的处理是不可靠的。这样得出的 disk 和 part 不一定真实。


点评

是呀,这就是大家最开始觉得五花八门,不好实现的原因  详情 回复 发表于 2022-11-4 09:43
回复

使用道具 举报

21#
 楼主| 发表于 2022-11-4 10:12:08 | 显示全部楼层
D_M_GuYing 发表于 2022-11-4 09:43
是呀,这就是大家最开始觉得五花八门,不好实现的原因

用 pecmd 获取 系统未使用盘符,用 Fdrv -idle 指令就可以。

点评

哎,没吃透PECMD呀,两行就完事的,要我弄了十几行 FDRV *idle nodrv MSTR s_nodrv=7,2,%nodrv%  详情 回复 发表于 2022-11-4 10:36
哦,哦,谢谢呀,我写的太笨了  详情 回复 发表于 2022-11-4 10:24
回复

使用道具 举报

22#
 楼主| 发表于 2022-11-4 10:31:24 | 显示全部楼层
D_M_GuYing 发表于 2022-11-4 10:24
哦,哦,谢谢呀,我写的太笨了

那个 截取  注册表内容 获取  disk 和 part 的功能,不用 bat ,用 pecmd 也是可以的,看我上面的那个 x.ini

关键是 这样获取的结果 不靠谱。

我是 用之前 脚本版块 5大 的一个pecmd脚本,调用 ntdll.dll 的api 把他转换成 可以由 pecmd 的 disk/part 等命令使用的 格式和 编号。然后,才敢用 disk /part 等指令来操作。至少也要转换成 volumn 这样 dos 下可以用的 卷标识。
回复

使用道具 举报

23#
 楼主| 发表于 2022-11-4 12:36:02 | 显示全部楼层
D_M_GuYing 发表于 2022-11-4 10:36
哎,没吃透PECMD呀,两行就完事的,要我弄了十几行

FDRV *idle nodrv

http://bbs.wuyou.net/forum.php?m ... 67&fromuid=1198

这种方法 不靠谱,以前研究过
回复

使用道具 举报

24#
 楼主| 发表于 2022-11-4 14:12:40 | 显示全部楼层
原来 pecmd 的part list volume 已经进化。
可以 直接引用 这种路径,获取对应分区信息

part -drv list volume  \ArcName\multi(0)disk(0)rdisk(0)partition(1),&part_info
弄了个 基本上能够满足需求的脚本。放在1楼。如此,精准到 boot.wim 所在位置 调取对应外置就成为可能了
回复

使用道具 举报

25#
 楼主| 发表于 2022-11-4 20:18:46 | 显示全部楼层
本帖最后由 dos时代菜鸟 于 2022-11-4 20:21 编辑

如图,在 pe 的 Wim 文件并列放置一个 配置文档,当 pe 启动时,如果能精准定位到 wim 位置,并确定存在 同名 ini 配置文件,就以这个 ini 文件作为启动脚本调用。

如此,给pe 增加一些 设置 就变得容易多了。
这种精准定位 wim 位置,避免了 用 forx 轮巡搜索可能加载了 别的同名外置或者脚本的情况。






点评

不同的pe有不同的文件夹位置,有不同的配置文件和外置程序位置,精准定位,更适合pe的维护。  详情 回复 发表于 2022-11-4 21:14
回复

使用道具 举报

26#
 楼主| 发表于 2022-11-4 21:14:28 来自手机 | 显示全部楼层
dos时代菜鸟 发表于 2022-11-4 20:18
如图,在 pe 的 Wim 文件并列放置一个 配置文档,当 pe 启动时,如果能精准定位到 wim 位置,并确定存在 同 ...

不同的pe有不同的文件夹位置,有不同的配置文件和外置程序位置,精准定位,更适合pe的维护。
回复

使用道具 举报

27#
 楼主| 发表于 2022-11-4 21:15:54 来自手机 | 显示全部楼层
就算多个pe公用一个文件夹,也还有配置文件可以最补充设置调整。
回复

使用道具 举报

28#
 楼主| 发表于 2022-11-5 07:53:45 | 显示全部楼层
本帖最后由 dos时代菜鸟 于 2022-11-5 08:09 编辑
D_M_GuYing 发表于 2022-11-5 06:31
实机(外星人m15r6)下测试新版本boot.wim.drv-2.4
测试PE:【22.11.01】大漠孤鹰Win11PE_x64_APFS

pecmd2012 是啥版本?估计是还没进化的 pecmd 没有

part -drv list volume  \ArcName\%value1%,&part_info

这种获取硬盘分区的写法。

换成 最新版的再看看呢?

多谢测试

特意下载那个pe 测试,确实 因为 pecmd 版本太低导致。



点评

嗯,我也细看了下,应该是版本原因,可大部分PE都是这个版本 开始以为 part list cdrom 没问题part -drv list volume也应该没问题呢  详情 回复 发表于 2022-11-5 08:24
回复

使用道具 举报

29#
 楼主| 发表于 2022-11-5 08:33:43 | 显示全部楼层
D_M_GuYing 发表于 2022-11-5 08:24
嗯,我也细看了下,应该是版本原因,可大部分PE都是这个版本
开始以为 part list cdrom 没问题part -drv ...

之前也考虑 这个问题,所以把 调用 api 的 脚本放进来了,后来发现 新版 可以直接用,就把那些代码取消了。

另外 ,pecmd 可以简单创建 vhd ,不用调用 diskpart 。
回复

使用道具 举报

30#
 楼主| 发表于 2022-11-5 09:19:19 | 显示全部楼层
D_M_GuYing 发表于 2022-11-5 09:13
{
    MOUN !\WEPE\WEPE.INI,X:\a,1
    FILE X:\a

如果 不提前运行 分区挂载,而是 即得 即挂载,也是可以的。
几条代码就可以。

从 reg 获取路径 找出 对应 硬盘号和分区号。

挂载的事情 你懂的。

点评

嗯,,, 你的PECMD.EXE能附件一个不,我下载了好几个都不行  详情 回复 发表于 2022-11-5 09:25
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-5-12 11:07

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表