无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
楼主: liuzhaoyzz
打印 上一主题 下一主题

请问下有没有办法用批处理或者命令行小程序确定系统引导分区?

    [复制链接]
361#
发表于 2021-1-27 11:28:41 | 只看该作者
liuzhaoyzz 发表于 2021-1-27 08:57
感谢分享,已收藏!

bcdedit + mountvol 可以不受 注册表限制,即使 注册表中没有 信息,也能找到。但xp 不行。
pecmd 方案 要读取 注册表
diskpart 只适用于 本地win系统
wmi  适用于本地win 系统

点评

其实也有不读注册表的方案:  详情 回复 发表于 2021-1-27 12:56
回复

使用道具 举报

362#
发表于 2021-1-27 15:08:01 | 只看该作者
本帖最后由 dos时代菜鸟 于 2021-1-27 15:21 编辑
527104427 发表于 2021-1-27 12:56
其实也有不读注册表的方案:

还是这样 用 api 调用ntdll.dll 函数 NtQuerySystemInformation 来的放心呀。
按照你的思路,精简成这样了, bcd_vol-3.7z (787 Bytes, 下载次数: 19) ,用 pecmd 调用 api 句柄,就会照葫芦画瓢。到底为啥,我也不知道。



如果用读取注册表的方案,
我尝试把 .HKLM\SYSTEM\CurrentControlSet\Control\FirmwareBootDevice 删了,
脚本会 尝试 用 .HKLM\SYSTEM\CurrentControlSet\Control\SystemBootDevice ,
而如果直接用 api 肯定没这问题了。

点评

根据楼主严苛的测试,NtQuerySystemInformation只能作为备用选项。 注册表更准确  详情 回复 发表于 2021-1-27 16:13
回复

使用道具 举报

363#
发表于 2021-1-27 16:25:05 | 只看该作者
527104427 发表于 2021-1-27 16:13
根据楼主严苛的测试,NtQuerySystemInformation只能作为备用选项。
注册表更准确


那个注册表 数值 到底是怎么 生成的呢?是系统启动的时候 必生成的么?

点评

这就不懂了,等高手解释咯  详情 回复 发表于 2021-1-27 17:06
回复

使用道具 举报

364#
发表于 2021-1-27 19:43:14 | 只看该作者
527104427 发表于 2021-1-27 17:06
这就不懂了,等高手解释咯

我就是想知道 比如:
multi(0)disk(0)rdisk(1)partition(1)
是不是就是 整个硬盘序列的 第一硬盘的第一分区。前面 multi(0)disk(0) 都没有关系?
如果是的话,diskpart 可以来完成下面的操作。只要引导是通过 硬盘来完成的,就行。

点评

原先我跟你想的一样,可事实却很残忍,这个值只是windows放在那里迷惑人的东西,有可能链接到别的分区上,而并非眼睛看到的分区。只能通过API解析这个链接,得到真正的路径。  详情 回复 发表于 2021-1-27 20:20
回复

使用道具 举报

365#
发表于 2021-1-27 22:08:44 | 只看该作者
本帖最后由 dos时代菜鸟 于 2021-1-27 22:33 编辑
527104427 发表于 2021-1-27 20:20
原先我跟你想的一样,可事实却很残忍,这个值只是windows放在那里迷惑人的东西,有可能链接到别的分区上 ...

看来还真的是个 很让人无语的 注册表标记呀。

如果用 pecmd 的 dll 版, 能否绕过 360?

点评

楼主说 cli 版能过360,我也不清楚  详情 回复 发表于 2021-1-27 22:35
回复

使用道具 举报

366#
发表于 2021-1-27 23:07:09 | 只看该作者
本帖最后由 dos时代菜鸟 于 2021-1-27 23:44 编辑
527104427 发表于 2021-1-27 22:35
楼主说 cli 版能过360,我也不清楚

那就好办多了,
现弄个 这个,只是用到 pecmd 调用 api 获取了一下 启动卷 分区。
如果 可以绕过 360 ,这个也不失为一个方案。

bcd vol_4.1.7z (2.03 MB, 下载次数: 20)

,如果能过 360 ,可以考虑 不用 diskpart 了。

不知道更换 pecmd.dll  ,能否绕过360
刚测试了一下,用 pecmd_u_cli调用 巨小版DLL  ,能够绕过 360.重新上传了一下。


点评

dll版本,巨小版本,免杀版本,通通会被360追杀啊,前面我有帖子说过了啊!  详情 回复 发表于 2021-1-28 22:40
回复

使用道具 举报

367#
发表于 2021-1-28 10:40:53 | 只看该作者
本帖最后由 dos时代菜鸟 于 2021-1-28 12:07 编辑

用 pecmd 调用 api 或者 reg  实现 bcd启动分区的 挂载与卸载
具体 可以到 cmd 中设置 模式。


经过测试 可绕过 360 .

bcd_vol_4.2.7z (2.04 MB, 下载次数: 34)

通过pecmd 获取bcd 分区卷,分配盘符
参数 /up 挂载盘符,参数 /d 卸载盘符
如果盘符不是本脚本挂载,就不卸载,如果有盘符,就不挂载







点评

你好! 请问怎么用 autoit 调用 api 获取启动分区的磁盘分区编号? 仅获取启动分区的磁盘分区编号相关信息, 无需挂载启动分区  详情 回复 发表于 2022-4-23 20:42
批处理玩得真6,我以前也玩过一段时间,不过跟老大比起来,望尘莫及啊  详情 回复 发表于 2021-1-28 12:28
回复

使用道具 举报

368#
发表于 2021-1-28 12:43:56 | 只看该作者
527104427 发表于 2021-1-28 12:28
批处理玩得真6,我以前也玩过一段时间,不过跟老大比起来,望尘莫及啊

过奖,过奖,pecmd 调用  api 我就不咋明白。
回复

使用道具 举报

369#
发表于 2021-1-28 21:09:47 | 只看该作者
pecmd 的 disk 指令 装卸 硬盘分区 ,如果遇到隐藏分区,是需要加参数 ,99


更新下
bcd_vol_4.21.7z (2.04 MB, 下载次数: 44)

回复

使用道具 举报

370#
 楼主| 发表于 2021-1-28 22:40:00 来自手机 | 只看该作者
本帖最后由 liuzhaoyzz 于 2021-1-28 22:42 编辑
dos时代菜鸟 发表于 2021-1-27 23:07
那就好办多了,
现弄个 这个,只是用到 pecmd 调用 api 获取了一下 启动卷 分区。
如果 可以绕过 360 , ...


       dll版本,巨小版本,免杀版本,通通会被360追杀啊,前面我有帖子说过了啊!有图有真相啊!
不压缩的原始版本都可以过360。

点评

我就是想用 DLL版的,结果发现,是一样的,只有原始版没问题。 因为考虑要与 CMD 有信息流交流。  详情 回复 发表于 2021-1-28 23:36
回复

使用道具 举报

371#
发表于 2021-1-28 23:36:14 来自手机 | 只看该作者
liuzhaoyzz 发表于 2021-1-28 22:40
dll版本,巨小版本,免杀版本,通通会被360追杀啊,前面我有帖子说过了啊!有图有真相啊!
不 ...

我就是想用 DLL版的,结果发现,是一样的,只有原始版没问题。
因为考虑要与 CMD 有信息流交流。
回复

使用道具 举报

372#
发表于 2021-2-21 21:12:55 | 只看该作者
这个查当前系统的引导分区,感觉bootice显示信息能直接找到呀
回复

使用道具 举报

373#
发表于 2021-3-16 22:13:28 | 只看该作者
本帖最后由 dos时代菜鸟 于 2021-3-16 22:19 编辑

通过 api 和 reg 两种方式判断 系统引导分区 ,还是有区别的

api 模式,返回的是 系统启动分区,这个分区不一定是 bcd 分区,可能是 grub4uefi
reg 模式,返回的是 启动系统的 bcd 所在分区。

比如,我用 grub4uefi 虚拟了一个 Svbus 盘,在用 这个虚拟盘 上的  bcd 启动了系统,系统安装了 Svbus驱动,可以识别 这个虚拟盘。

判断系统引导分区,在用 api 方式时,返回的是 grub4uefi 所在分区,而用 reg 时,返回的是 这个 svbus盘


这也间接证明了 ,系统安装时 去找 启动分区 来进行 bcd 写操作,是通过 api 方式确定启动分区的,所以,在制作系统封装时,如果用到了 其他引导器调用微软的 bootmgr_bcd 启动系统,就必须 保证 两个引导器在同一个分区,这个在制作ram系统时也要格外注意。当然系统安装完毕以后,就无所谓了。

回复

使用道具 举报

374#
发表于 2021-6-23 14:01:16 | 只看该作者
liuzhaoyzz 发表于 2021-1-11 08:59
我觉得不是代码签名的问题吧,bootice也没有做签名,有时候就报毒,有时候不报,大部分时候是不报 ...

360对bootice不报毒,估计是基于大数据学习,看bootice使用量还挺高的,故此有这么一套学习在修正所谓的360安全大脑
回复

使用道具 举报

375#
发表于 2021-6-23 16:29:07 | 只看该作者
请教一下版主,不论是DOS时代菜单的dpx脚本,还是CodeHz的工具,都没有办法在通过光盘引导进pe后,在PE里面正确找到引导分区,因我是虚拟机测试,我猜想实际情况从U盘进入的PE,也是找不到。

把PE安装到硬盘,从硬盘启动PE,那么则可正确找到,想必这些工具是通过启动系统自带的BCD之类的查询,

现在请问,是我的用法不对还是这些工具本身就不具备我上述所的功能呢?

点评

那个 api 的最初目的是 为了 在系统安装的第一次启动时 找到 bcd 并完善之。 你用 光盘启动,这个 api 当然 就找不到了。 不光是光盘启动 找不到,就是 用 grub 启动以后 调用 其他分区的 Bcd 启动,api 也会认为  详情 回复 发表于 2021-6-25 22:21
从PE里面启动判断引导分区?这个问题和思路就不对。这种情况下,你说说看什么叫做引导分区? 对于BIOS启动,一般是活动分区,每个带有引导文件活动分区都有可能是引导分区,比如优盘移动硬盘,本地多个硬盘,都有可  详情 回复 发表于 2021-6-25 19:28
回复

使用道具 举报

376#
 楼主| 发表于 2021-6-25 19:28:54 来自手机 | 只看该作者
本帖最后由 liuzhaoyzz 于 2021-6-25 19:37 编辑
ESD 发表于 2021-6-23 16:29
请教一下版主,不论是DOS时代菜单的dpx脚本,还是CodeHz的工具,都没有办法在通过光盘引导进pe后,在PE里面 ...


从PE里面启动判断引导分区?这个问题和思路就不对。这种情况下,你说说看什么叫做引导分区?
对于BIOS启动,一般是活动分区,每个带有引导文件的活动分区都有可能是引导分区,比如优盘移动硬盘,本地多个硬盘,都有可能是,你说通过程序怎么判断?而且g4d启动根本就不需要活动分区,只要MBR是g4d,可以从随便一个MBR分区启动windows,你怎么判断?

UEFI情况类似,什么叫做引导分区?ESP分区能算引导分区吗?不一定,有的电脑就没有ESP分区,全部都是NTFS分区都可以启动windows。存在/efi/microsoft/boot/bootmgfw.efi的算启动分区吗?可能多硬盘都有这个文件。

我的意思是bootmgr/bootmgfw.efi作为主引导引导硬盘或者vhd里面的windows或者硬盘里面的pe.wim的时判断引导分区,而不是PE.ISO启动的环境下去判断。PE知道啥?他怎么知道他是怎么被引导的?是ISO还是wim?那么多引导方式,如果用g4d/g4e/grub2用wimboot/ntloader/ntboot引导pe.wim,pe应该是无法确定你想要的那个引导分区,有g4d/g4e/grub2引导文件的分区算是“引导分区”吗?!显然未必是。有很多歧义,没有确定性答案,也就是没有答案。      
回复

使用道具 举报

377#
发表于 2021-6-25 21:20:08 | 只看该作者
liuzhaoyzz 发表于 2021-6-25 19:28
从PE里面启动判断引导分区?这个问题和思路就不对。这种情况下,你说说看什么叫做引导分区?
对于BIOS ...

嗯 感谢回复这么多,辛苦了。

如此来看,那些PE下的系统安装工具,估计也是默认指定某块硬盘(比如第一块硬盘,或SSD)的某个分区(如ESP分区)来进行引导修复,照此来看还是存在判断失误的情况,是吧?

我开始不明白,以为系统安装工具能准确识别引导并且修复,而这个工具无法判断,还以为是自己使用错了(虽然不适合在PE下用)。
回复

使用道具 举报

378#
发表于 2021-6-25 22:21:36 | 只看该作者
本帖最后由 dos时代菜鸟 于 2021-6-25 22:23 编辑
ESD 发表于 2021-6-23 16:29
请教一下版主,不论是DOS时代菜单的dpx脚本,还是CodeHz的工具,都没有办法在通过光盘引导进pe后,在PE里面 ...

那个 api  的最初目的是 为了 在系统安装的第一次启动时 找到 bcd 并完善之。
你用 光盘启动,这个 api 当然 就找不到了。
不光是光盘启动 找不到,就是 用 grub 启动以后 调用 其他分区的 Bcd 启动,api 也会认为启动分区是 grub 所在分区 ,而注册表 中记录的 是 bcd 所在的分区,此时 安装程序会发现 这个 启动分区(grub) 与启动自身的 bcd 分区 不一致,安装过程也会中止。

另外说一下,用 u 盘启动 pe ,是可以识别到 启动分区是 u盘的。
你的 BIOS调用的启动介质 是 硬盘 u 盘,api 就能找到,唯独只读的 光盘不行。
回复

使用道具 举报

379#
发表于 2021-6-26 08:20:20 | 只看该作者
dos时代菜鸟 发表于 2021-6-25 22:21
那个 api  的最初目的是 为了 在系统安装的第一次启动时 找到 bcd 并完善之。
你用 光盘启动,这个 api  ...

用 u 盘启动 pe ,是可以识别到 启动分区是 u盘的。

如此说来,依旧没办法正确识别硬盘上的系统引导,比如PE下安装系统后,需要引导修复,那么这些系统安装工具也是不能准确做出引导修复,它们也只是判断个大概,或者默认指定第一磁盘第一分区之类的方式来修复,而无法做到真正识别到原有系统的引导分区来加以修复的情况了?
回复

使用道具 举报

380#
发表于 2021-6-27 00:24:07 | 只看该作者
我在pe群深入学习发现
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control
有个SystemBootDevice值,很色情地描写了系统是从哪个分区启动的,

点评

你说的这个注册表项,帖子里面讨论过了,不靠谱。  详情 回复 发表于 2021-6-28 09:52
回复

使用道具 举报

381#
 楼主| 发表于 2021-6-28 09:52:31 来自手机 | 只看该作者
江南一根葱 发表于 2021-6-27 00:24
我在pe群深入学习发现
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control
有个SystemBootDevice值,很色 ...

你说的这个注册表项,帖子里面讨论过了,不靠谱。      

点评

我看 49# CodeHz 的程序里面就是直接读的注册表啊?(http://bbs.wuyou.net/forum.php?mod=redirect&goto=findpost&ptid=423468&pid=4214287&fromuid=487838)  详情 回复 发表于 2023-4-10 22:31
是怎么个不靠谱,有实际大量试验过概率吗  详情 回复 发表于 2021-6-28 10:37
回复

使用道具 举报

382#
发表于 2021-6-28 10:37:42 | 只看该作者
liuzhaoyzz 发表于 2021-6-28 09:52
你说的这个注册表项,帖子里面讨论过了,不靠谱。

是怎么个不靠谱,有实际大量试验过概率吗

点评

我前面有测试啊,具体场景忘了,但是真的是对不上,你看下前面的帖子就知道了。无非是几种测试: 1、bootmgr+MBR硬盘。 2、bootmgfw.efi+MBR硬盘。好像是这个情况下结果不对,记不清了,总之是不对。 3、bootmgfw  详情 回复 发表于 2021-6-28 12:06
回复

使用道具 举报

383#
 楼主| 发表于 2021-6-28 12:06:23 | 只看该作者
江南一根葱 发表于 2021-6-28 10:37
是怎么个不靠谱,有实际大量试验过概率吗

我前面有测试啊,具体场景忘了,但是真的是对不上,你看下前面的帖子就知道了。无非是几种测试:
1、bootmgr+MBR硬盘。
2、bootmgfw.efi+MBR硬盘。好像是这个情况下结果不对,记不清了,总之是不对。
3、bootmgfw.efi+GPT硬盘。

最后还是Windows API更靠谱。
        
回复

使用道具 举报

384#
发表于 2021-6-28 16:43:43 | 只看该作者
PE下,几个方案综合处理,
逐个对可识别分区,用 PECMD 映射到某盘符,确定分区是否存在WINDOWS,
是否存在BCD,对WINDOWS 文件夹分析,对BCD分析。
这是最常规的办法。
特殊的情况千千万,弄不清楚,比如,我用GRUB调用一个 IMG里的BCD启动系统的,你咋找出来。
所以,能在本地当前系统下通过API找出直接的启动分区,就不错了。


点评

嗯,,,,,我一般是从网络启动的, 唷,从网络分区引导的,想知道怎么找出来  详情 回复 发表于 2021-7-4 00:13
回复

使用道具 举报

385#
发表于 2021-7-4 00:13:20 | 只看该作者
dos时代菜鸟 发表于 2021-6-28 16:43
PE下,几个方案综合处理,
逐个对可识别分区,用 PECMD 映射到某盘符,确定分区是否存在WINDOWS,
是否存 ...

嗯,,,,,我一般是从网络启动的,
唷,从网络分区引导的,想知道怎么找出来
回复

使用道具 举报

386#
发表于 2021-8-12 01:02:14 | 只看该作者
liuzhaoyzz 发表于 2021-1-20 22:59
我传上来。我感觉出错的原因可能是ChkMBRPBR尝试卸载光驱所在的盘符导致出错。

请问有比这个更新的版本吗?
源码很有学习价值,求分享!

点评

https://liuzhaoyzz.lanzoui.com/iHoXksis2ta  详情 回复 发表于 2021-8-12 08:05
回复

使用道具 举报

387#
 楼主| 发表于 2021-8-12 08:05:04 | 只看该作者
Anson4 发表于 2021-8-12 01:02
请问有比这个更新的版本吗?
源码很有学习价值,求分享!

https://liuzhaoyzz.lanzoui.com/iHoXksis2ta

点评

这是很好的学习范本,感谢分享!  详情 回复 发表于 2021-8-12 09:39
回复

使用道具 举报

388#
发表于 2021-8-12 09:39:37 | 只看该作者
liuzhaoyzz 发表于 2021-8-12 08:05
https://liuzhaoyzz.lanzoui.com/iHoXksis2ta

这是很好的学习范本,感谢分享!
回复

使用道具 举报

389#
发表于 2022-4-23 20:42:31 | 只看该作者
dos时代菜鸟 发表于 2021-1-28 10:40
用 pecmd 调用 api 或者 reg  实现 bcd启动分区的 挂载与卸载
具体 可以到 cmd 中设置 模式。

你好! 请问怎么用 autoit 调用 api 获取启动分区的磁盘分区编号?
仅获取启动分区的磁盘分区编号相关信息, 无需挂载启动分区

点评

抱歉 autoit 不是很熟。  详情 回复 发表于 2022-4-26 08:22
回复

使用道具 举报

390#
发表于 2022-4-26 08:22:40 | 只看该作者
Bluebells 发表于 2022-4-23 20:42
你好! 请问怎么用 autoit 调用 api 获取启动分区的磁盘分区编号?
仅获取启动分区的磁盘分区编号相关信息 ...

抱歉 autoit 不是很熟。

点评

能否给出你在调用 NtQuerySystemInformation 函数获取启动分区时所使用的参数及其类型? 谢谢!  详情 回复 发表于 2022-4-26 09:49
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-11-26 06:06

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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