dos时代菜鸟 发表于 2022-11-5 21:45:53

D_M_GuYing 发表于 2022-11-5 19:47
笨方法虽然不能面面俱到,但对我这个PE却管用,先不折腾了

//查找并分配外置所在的隐藏分区


休息,休息,休息。

D_M_GuYing 发表于 2022-11-6 06:26:29

本帖最后由 D_M_GuYing 于 2022-11-6 07:31 编辑

   IFEX %wzPath%,!
    {
      CALL getNoDrv
      DISK %nodrv%,%RDISK%,2,1
      ENVI wzPath=%nodrv%\WEPE\WEPE.INI
    }
//搜索光驱,安装WinPE.CMD,这是我的PE光盘中独有的文件
IFEX %wzPath%,!
{
    FORX !\Setup\安装WinPE.CMD,STPATH,1,FDRV STPATH=%STPATH%
    ENVI wzPath=%STPATH%\WEPE\WEPE.INI
}
//搜索并挂载,如文件在隐藏分区,自动分配盘符
IFEX %wzPath%,!
{
    MOUN !\WEPE\WEPE.INI,X:\a,1
    FILE X:\a
    FORX !\WEPE\WEPE.INI,fPath,1,ENVI wzPath=%fPath%
}
//显示所有盘符,搜索定位
IFEX %wzPath%,!
{
    SHOW -1:-1
    FORX !\WEPE\WEPE.INI,fPath,1,ENVI wzPath=%fPath%
}

我的笨方法,在红色部分已经分配盘符了,其后的搜索分区,挂载隐藏,显示所有,都还没有用到,挂载用的就是
DISK %nodrv%,%RDISK%,2,1
%RDISK%就是注册表读到的 2,也算是和注册表靠点边了
这是笨方法启动后的图


之后运行了boot.wim.Path-2.72,可是错把ESP分区给定位了,这就是逆向搜索的结果,
我笨方法的后三部分也就是这个原理,其实已经谈不上精确定位了
与依据注册表读取分析并正确解释的根本想法已经脱离了,逆向搜索已经不再依据注册表
你的“diskpart外壳 2022.03.23 ver:1.27”在盘符隐藏的时候就已经正确的定位了U启在2.2
那以此为依据,DISK参数就分配盘符了,这也算精确定位了,要比全盘搜索靠谱。
只是不知道在boot.wim.Path中怎么实现,说白了,就是把注册表读到的2.4,怎么精确转成2022.03.23 ver:1.27读到的2.2




dos时代菜鸟 发表于 2022-11-6 08:50:51

D_M_GuYing 发表于 2022-11-6 06:26
IFEX %wzPath%,!
    {
      CALL getNoDrv


还有一个办法,就是针对相应 的第2硬盘 运行show 指令,然后判断多出来的盘符是否可用,如果可用,再用part 看一下他的分区号是否是 2.4,如果是,那再找一下文件,如果有那个文件,就对上了。

dos时代菜鸟 发表于 2022-11-6 09:58:17

本帖最后由 dos时代菜鸟 于 2022-11-6 10:05 编辑

D_M_GuYing 发表于 2022-11-6 06:26
IFEX %wzPath%,!
    {
      CALL getNoDrv

难道 你的 \wepe\wepe64.wim 不在 esp 分区上么?

可能是因为 你的硬盘分区体系中有 多个 \wepe\wepe64.wim 分别在不同的硬盘上,而 show -1:-1 是把所有的 未挂载分区都挂上了,也不知道挂上的 哪一个分区是 指定硬盘的。
如果 show 只针对 u盘上的 未挂载分区 进行挂载,就不会有这个问题了,或者只对 那个硬盘进行逆序搜索就行了。
或者再精准点儿,直接 获取挂载的盘符 对应的分区号,如果与 解析注册表 得到的一致,那么这个盘符 就是精准定位的分区了。





dos时代菜鸟 发表于 2022-11-6 11:08:27

D_M_GuYing 发表于 2022-11-6 06:26
IFEX %wzPath%,!
    {
      CALL getNoDrv

如果 pecmd 根本无法解析 那个错误的 Reg 信息呢?

可以先用 show -check -1:-1 把win能识别的分区都分配了盘符 ,包括 esp
然后,再 不能解析Reg时,再 show -1:-1 ,此时分配的盘符应该是 那些特殊的分区,
通过计算,可以找出特殊分区 对应的 盘符,这样就更精准了,就在特殊分区里找特定文件。如果 特殊分区里找不到,再去常规分区里找。

新更新的 已经放到 1楼。

D_M_GuYing 发表于 2022-11-6 11:43:36

dos时代菜鸟 发表于 2022-11-6 11:08
如果 pecmd 根本无法解析 那个错误的 Reg 信息呢?

可以先用 show -check -1:-1 把win能识别的分区都 ...

SHOW全部显示后
part -drv list volume\ArcName\%value1%,&part_info
也读不到信息&part_info是空的
注册表上能读出来,
value1=MULTI(0)DISK(0)RDISK(2)PARTITION(4)
我下载新版看看

D_M_GuYing 发表于 2022-11-6 11:51:26

dos时代菜鸟 发表于 2022-11-6 11:08
如果 pecmd 根本无法解析 那个错误的 Reg 信息呢?

可以先用 show -check -1:-1 把win能识别的分区都 ...

boot.wim.Path-2.73还是不行。

我先用着这个对付下,这已经很感谢了,


CALL FINDFZ
FDIR wimPath=%wzPath%

_SUB FINDFZ
REGI .HKLM\SYSTEM\CurrentControlSet\Control\SystemStartOptions,&sso
forx * %&sso% ,&p0,
{
    envi &&item0=
    mstr &&item0=0,7,%&p0%
    Find $"%&item0%"="RDPATH=" ,
    {
      mstr &p0=8,0,%&p0%            
      mstr -delims:\ value1=<1>%&p0%
    }
}
Find $"%value1%"<>"",
{//注册表信息读取成功
    sed *ni &str2=0,[()0123456789], ,%value1%
    mstr &type1=<3>%&str2%%
    mstr RDISK=22,1,%value1%
    ifex '%&type1%'='cdrom',
    {//如果是光驱启动,则查找光驱内标志性文件,获取配置文件所在的光驱盘符
      FORX !\Setup\安装WinPE.CMD,STPATH,1,FDRV STPATH=%STPATH%
      ENVI wzPath=%STPATH%\WEPE\WEPE.INI
    }!
    {//如果不是光驱,就读取一下 分区信息,获取分区所在硬盘号,分区号,盘符
    part -drv list volume\ArcName\%value1%,&part_info
    ifex '%&part_info%'<>'',
      {//获取到了 路径对应的硬盘/分区/盘符 信息
            mstr &disk,&part,&ltr=<2><3><8>%&part_info%
            Find $"%&ltr%"="",
            {//该卷没有被分配盘符立即分配
                fdrv -idlec &drvs=*:
                mstr &drvx=<1>%&drvs%
                DISK %&drvx%,%&disk%,%&part%,1
                ENVI wzPath=%&drvx%\WEPE\WEPE.INI
            }
      }!
      { //未知原因list volume没有获取到信息,尝试笨方法分配U启隐藏分区
            fdrv -idlec &drvs=*:
            mstr &drvx=<1>%&drvs%
            DISK %&drvx%,%RDISK%,2,1
            ENVI wzPath=%&drvx%\WEPE\WEPE.INI
      }
    }
}
IFEX %wzPath%,!
{
    MOUN !\WEPE\WEPE.INI,X:\a,1
    FILE X:\a
    FORX !\WEPE\WEPE.INI,fPath,1,ENVI wzPath=%fPath%
}
IFEX %wzPath%,!
{
    SHOW -1:-1
    fdrv &drvs=*:
    forx * %&drvs%,&drvx,
    {
      ifex ! %&drvx%\,subj -%&drvx%
    }
    FORX !\WEPE\WEPE.INI,fPath,1,ENVI wzPath=%fPath%
}
EXEC =!CMD /C ECHO ENVI wzPath=%wzPath% > %temp%\wzPath.INI
_END

dos时代菜鸟 发表于 2022-11-6 12:06:20

本帖最后由 dos时代菜鸟 于 2022-11-6 12:24 编辑

D_M_GuYing 发表于 2022-11-6 11:51
boot.wim.Path-2.73还是不行。

我先用着这个对付下,这已经很感谢了,

不好意思 刚上传的 缺了一个 引号, 会新上传一个。

但是为啥 新分配的特殊分区 没有意义呢?那上面 不能读取信息么?

dos时代菜鸟 发表于 2022-11-6 12:29:10

本帖最后由 dos时代菜鸟 于 2022-11-6 13:13 编辑

D_M_GuYing 发表于 2022-11-6 11:51
boot.wim.Path-2.73还是不行。

我先用着这个对付下,这已经很感谢了,

因为没有 你那个 磁盘环境,不能针对性的 编辑脚本,不知道 那个 分区 与其他分区的区别 可以通过什么来找出。

那个分区 居然可以被 pecmd 的 show -check 挂载。

如果 事先 对分区盘符进行了排序,按照硬盘 u盘 光盘 的顺序分配盘符,搜索时就不会有这个问题了。


D_M_GuYing 发表于 2022-11-6 14:04:37

dos时代菜鸟 发表于 2022-11-6 12:29
因为没有 你那个 磁盘环境,不能针对性的 编辑脚本,不知道 那个 分区 与其他分区的区别 可以通过什么来 ...

DISK 也可以加载这个分区,所以,很是怪,
我正准备用最新的PECMD.EXE试试

D_M_GuYing 发表于 2022-11-6 14:27:35

dos时代菜鸟 发表于 2022-11-6 12:29
因为没有 你那个 磁盘环境,不能针对性的 编辑脚本,不知道 那个 分区 与其他分区的区别 可以通过什么来 ...

boot.wim.Path-2.74测试
还是list volume不到信息,,不过搜索定位准确了,不再错误定位ESP分区

dos时代菜鸟 发表于 2022-11-6 15:39:39

D_M_GuYing 发表于 2022-11-6 14:27
boot.wim.Path-2.74测试
还是list volume不到信息,,不过搜索定位准确了,不再错误定位ESP分区

上个图先。

另外 弄了个 2.75 也可以试试

D_M_GuYing 发表于 2022-11-6 20:42:34

dos时代菜鸟 发表于 2022-11-6 15:39
上个图先。

另外 弄了个 2.75 也可以试试

2.75还是读不到,我这个U盘很怪
觉得,找到信息后,如果没有盘符,分配时按正向分配较好,这样,全部装载时,就不用排除已有盘符这一环节,只要逆向搜索就行了,因为之前的盘符都是靠上的

D_M_GuYing 发表于 2022-11-6 20:53:21

dos时代菜鸟 发表于 2022-11-6 15:39
上个图先。

另外 弄了个 2.75 也可以试试



用 disk ,2,2,1可以卸载

                fdrv -idlec &drvs=*:
                mstr &drvx=<1>%&drvs%
                DISK %&drvx%,2,2,1

可重新分配

dos时代菜鸟 发表于 2022-11-6 20:53:31

D_M_GuYing 发表于 2022-11-6 20:42
2.75还是读不到,我这个U盘很怪
觉得,找到信息后,如果没有盘符,分配时按正向分配较好,这样,全部装 ...

估计 是 show -check 加载不了他

把下面语句 存入pecmd 脚本 x.ini,用 x.ini 调用,看能独到信息不?
disk ,2,2,1
show -check 2:-1,1
part list part 2#2,x
mess %x%

-----------
换成
disk ,2,2,1
show 2:-1,1
part list part 2#2,x
mess %x%

再试试,看第一种 能获取到盘符不,如果不能,再看第二种,

确定 show 加载该分区的 方式哪一种有效,
看看 part list part 的方式能不能获取这个分区的信息,包括盘符信息。

dos时代菜鸟 发表于 2022-11-6 20:55:43

D_M_GuYing 发表于 2022-11-6 20:42
2.75还是读不到,我这个U盘很怪
觉得,找到信息后,如果没有盘符,分配时按正向分配较好,这样,全部装 ...

2.75 就是想 根据 硬盘 及其 分区的顺序 罗列已有盘符,在根据这些盘符顺序开展搜索

D_M_GuYing 发表于 2022-11-6 20:57:34

只要2.75能象diskpart外壳 2022.03.23 ver:1.27那样读取到,就一切OK

D_M_GuYing 发表于 2022-11-6 21:00:37

如果能通过注册表的
MULTI(0)DISK(0)RDISK(2)PARTITION(4)
转换得到,那就更加靠谱

D_M_GuYing 发表于 2022-11-6 21:02:35

如果MULTI(0)DISK(0)RDISK(2)PARTITION(4)不准确,那其它分区在注册表的体现出来的也不见得准确,
这样,以读取注册表为依据,就失去了意义

D_M_GuYing 发表于 2022-11-6 21:04:00

后面,再怎么弄,也只不过是各种形势的逆向搜索

dos时代菜鸟 发表于 2022-11-6 21:23:36

本帖最后由 dos时代菜鸟 于 2022-11-6 21:29 编辑

D_M_GuYing 发表于 2022-11-6 20:57
只要2.75能象diskpart外壳 2022.03.23 ver:1.27那样读取到,就一切OK
不可能,pecmd 才能解析注册表信息。
diskpart 得到的结果,显示,那个分区不能被 diskpart 分配盘符,有啥用?即便用 pecmd 对其分配了盘符,也不能通过 解析注册表 锁定这个分区。

针对 不能解析注册表的情况,也只有 及特殊的怪盘,这种情况
只有一个方法是可行的,就是 通过 pecmd 对所有有价值的分区都 分配盘符,再把这些盘符 按照硬盘分区序列的顺序逆向排序,而不是 abcdefg 这样自然顺序,这样就减少了对盘符重新理顺的麻烦(需要反复卸载装载最后理顺),然后再按照那个 新的排序顺序进行搜索,找到的第一个,也就是整个硬盘分区序列里的最后一个符合条件的分区。

我弄个 2.8版的,就是按照上面的逻辑来的,应该可以对付这种怪盘,但是据说 有的电脑 启动的usb-hd 会被认作第一个硬盘,这就不行了,但是 UltraISO 的u盘,通常也不是 usb-hd ,都是 usb-flash .


dos时代菜鸟 发表于 2022-11-6 21:43:56

D_M_GuYing 发表于 2022-11-6 21:04
后面,再怎么弄,也只不过是各种形势的逆向搜索

逆向搜索 只是被迫用的一种方案,是 针对 注册表 不能解析出真实路径的 怪盘用的权宜之计。

dos时代菜鸟 发表于 2022-11-6 23:47:46

D_M_GuYing 发表于 2022-11-6 21:02
如果MULTI(0)DISK(0)RDISK(2)PARTITION(4)不准确,那其它分区在注册表的体现出来的也不见得准确,
这样, ...

注册表应该是准确的,碰到虚拟跳转的情况,就另当别论了。
如果你在插着u盘的情况下运行本地同结构的pe需要调取外部程序准确位置,就需要这个,不然,逆序搜索,就到u盘了。尤其是经过盘符理顺或者u盘隐藏分区被分配了盘符的时候。

D_M_GuYing 发表于 2022-11-7 05:35:03

本帖最后由 D_M_GuYing 于 2022-11-7 05:37 编辑

dos时代菜鸟 发表于 2022-11-6 20:53
估计 是 show -check 加载不了他

把下面语句 存入pecmd 脚本 x.ini,用 x.ini 调用,看能独到信息不?
...
我觉得,按这个思路下去,好像要接近成功了,show -check -1:-1,1 从一开始就能分配这个盘符









D_M_GuYing 发表于 2022-11-7 05:43:02

本帖最后由 D_M_GuYing 于 2022-11-7 05:46 编辑

我很不不习惯一开始就显示所有盘符并整理,所以,尽可能的不挂不相关的分区
2.75虽然定位对了,但把ESP分区又挂上了,
part -drv list volume\ArcName\%value1%,&part_info读不到RDISK(2)
能否先不要全部装载并逆向搜索,缩小范围,先只对 RDISK(2) 下手,这样ESP分区就不会被分配了

dos时代菜鸟 发表于 2022-11-7 07:04:48

D_M_GuYing 发表于 2022-11-7 05:43
我很不不习惯一开始就显示所有盘符并整理,所以,尽可能的不挂不相关的分区
2.75虽然定位对了,但把ESP分 ...

注册表rdisk项的数字不能确保与实际硬盘序列序号一致,此时,除非,再把心挂载的分区,处目标分区外的再卸载。

dos时代菜鸟 发表于 2022-11-7 07:33:48

D_M_GuYing 发表于 2022-11-7 05:35
我觉得,按这个思路下去,好像要接近成功了,show -check -1:-1,1 从一开始就能分配这个盘符




如果 带 check 参数 ,能加载分区,就可以减少判断加载分区是否可用的步骤。
找到分区后,可以把其他后挂载的分区卸载

cbg520 发表于 2022-11-7 10:17:02

很多pe的位置都不定

D_M_GuYing 发表于 2022-11-7 13:34:03

老大帮个忙

envi WIMFILE=F:\WEPE\WEPE64.wim
callFind_index
_Sub Find_index
    exec* &mess1=*cmd /cDism /Get-ImageInfo/ImageFile:"%WIMFILE%"
    forx *Nl mess1,lx,
    {
      mstr -delims::item,value=<1><2>%lx%
      Find $%item%=索引, mstr -trim index=%value%
      Find $%item%=名称,
      {
          mstr -trim name=%value%
          envi lx=%index%:%name%

          这部分不知道怎么写,目的是把WIM的卷号和名称赋值给LIST的下接菜单
          例如 LIST内容为
          envi @List=第一个%lx%|第二个%lx%|第三个%lx%|..........第N个%lx%
      }
    }
_END

dos时代菜鸟 发表于 2022-11-7 13:59:26

D_M_GuYing 发表于 2022-11-7 13:34
老大帮个忙

envi WIMFILE=F:\WEPE\WEPE64.wim

这你得先做个窗口。控件设计到窗口里。
页: 1 2 3 [4] 5 6
查看完整版本: 确定当前pe 对应的 boot.wim 位置,基本解决