无忧启动论坛

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

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

    [复制链接]
31#
 楼主| 发表于 2021-1-6 08:24:23 | 显示全部楼层

我试了,这个从FAT32分区上面UEFI启动的,加了*号的是C盘,结果好像不对。感觉从bcdedit这条路走不通。


QQ拼音截图20210106081839.png (24.26 KB, 下载次数: 168)

QQ拼音截图20210106081839.png

点评

分别选中1 3 5 7,将生成的四个文本文件传上来看看  详情 回复 发表于 2021-1-6 09:43
回复

使用道具 举报

32#
 楼主| 发表于 2021-1-6 09:44:17 | 显示全部楼层
窄口牛 发表于 2021-1-6 08:36
不要想纯自动,太危险了,Linux和win混合双系统的更复杂。

周星驰:“人如果没有梦想,跟咸鱼有什么区别”?
回复

使用道具 举报

33#
 楼主| 发表于 2021-1-6 09:50:42 | 显示全部楼层
nttwqz 发表于 2021-1-6 09:43
分别选中1 3 5 7,将生成的四个文本文件传上来看看

怎么选中1 3 5 7?按任意键就直接退出了啊。

点评

忘了,dpinfo输入  详情 回复 发表于 2021-1-6 10:05
回复

使用道具 举报

34#
 楼主| 发表于 2021-1-6 10:31:24 | 显示全部楼层
dpinfo也不行啊。显示不出来。去你的帖子刚才下载的最新版的dpinfo

QQ拼音截图20210106103056.png (12.97 KB, 下载次数: 155)

QQ拼音截图20210106103056.png

点评

是不是diskpart被精简掉了  详情 回复 发表于 2021-1-6 13:09
回复

使用道具 举报

35#
 楼主| 发表于 2021-1-6 10:54:00 | 显示全部楼层
本帖最后由 liuzhaoyzz 于 2021-1-6 10:55 编辑
nttwqz 发表于 2021-1-6 10:05
忘了,dpinfo输入

哦,在WIN10-ramos里面,能够运行dpinfo。我把信息传上来。

WIN7.VHD里面运行不了,不知道怎么回事。

dpinfo_2.6输出的磁盘信息.rar

17.24 KB, 下载次数: 3, 下载积分: 无忧币 -2

点评

看了一下,脚本本身的判断并没有出错,方法有点问题,原方法就是找出启动磁盘为是的磁盘,mbr的活动分区就必定是了,这个单硬盘有效,多硬盘没有测试。不太明白这个启动磁盘具体含义,原以为是代表引导文件所在磁盘  详情 回复 发表于 2021-1-6 13:19
回复

使用道具 举报

36#
 楼主| 发表于 2021-1-6 14:27:40 | 显示全部楼层
nttwqz 发表于 2021-1-6 13:20
BCD分析的原理是:
先将所有激活或ESP分区分配个盘符,然后bcdedit新建一个临时项,遍历这个项目BCD所在分 ...

就怕有的电脑bcdedit都运行不了。如果能用windows API之类的搞定就好了。

我上面的磁盘列表都是MBR硬盘,还没有涉及到GPT硬盘。

点评

缺胳膊少腿的系统不在我的考虑范围内,你可以自己补全相关文件。 API只能等其它高手了,条件是他们愿意动手。  详情 回复 发表于 2021-1-6 17:57
回复

使用道具 举报

37#
 楼主| 发表于 2021-1-7 07:45:30 | 显示全部楼层
本帖最后由 liuzhaoyzz 于 2021-1-7 08:38 编辑
nttwqz 发表于 2021-1-6 20:31
此版完全放弃了启动磁盘+活动+ESP分区+分析BCD的方法,改为全部使用分析BCD的方法。

同上一版一样,我的 ...

试了下,这个版本结果是对的。我的环境是ESP分区启动一个vhd。带星号的就是ESP分区。



晚点换个环境继续测试下。结果如下:

从一个MBR的激活的FAT32分区UEFI启动,这个版本结果是对的。但是好像没有自动分配盘符?

点评

我也发现了问题,该分配的没有分配,该删除的没有删除。  详情 回复 发表于 2021-1-7 09:35
回复

使用道具 举报

38#
 楼主| 发表于 2021-1-7 07:47:20 | 显示全部楼层
本帖最后由 liuzhaoyzz 于 2021-1-7 08:41 编辑
527104427 发表于 2021-1-7 00:49
最后憋个大招,看有没有用:

5大,这个版本检测结果不对,我的环境是ESP分区启动一个vhd。结果定位到了另一个FAT32分区F,这个分区确实是有启动文件,但是不是从这个盘符启动的。请看下上面的截图1,本来应该是Z,结果chkmbrpbr定位到了F。

换了个环境,截图2,从一个MBR的激活的FAT32分区UEFI启动,chkmbrpbr定位到了D盘,实际上应该是第7个FAT32那个分区

点评

麻烦看下HKLM\SYSTEM\ControlSet001\Control\\FirmwareBootDevice的值是什么  详情 回复 发表于 2021-1-7 08:16
回复

使用道具 举报

39#
 楼主| 发表于 2021-1-7 08:41:18 | 显示全部楼层
527104427 发表于 2021-1-7 08:16
麻烦看下HKLM\SYSTEM\ControlSet001\Control\\FirmwareBootDevice的值是什么

        那台电脑在家里。我截图之后出来了,晚点看看。

点评

这么一看似乎就是 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FirmwareBootDevice 和 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SystemBootDevice 风别为引导盘和启动盘了(  详情 回复 发表于 2021-1-7 20:28
回复

使用道具 举报

40#
 楼主| 发表于 2021-1-7 09:54:53 | 显示全部楼层
nttwqz 发表于 2021-1-7 09:35
我也发现了问题,该分配的没有分配,该删除的没有删除。

有时候感觉checkbootpart执行起来很慢,大概有1-2分钟之久,不清楚原因。

点评

dpinfo有调试功能,将开头的改为set debug=on 这样会显示各步执行时间,看那一段时间长,在前面加句 cls & echo on,这样应该可以判断慢的原因,或者将开头回显打开以判断这个脚本慢的原因。  详情 回复 发表于 2021-1-7 10:39
获取磁盘信息需要执行两次diskpart,分配和删除盘符又需要两次,多硬盘系统所在磁盘一般不休眠,但是其它硬盘会休眠,休眠需要唤醒,唤醒需要时间,初次diskpart初始化也需要时间,分析本身是很快的,这就是我当初说  详情 回复 发表于 2021-1-7 10:19
回复

使用道具 举报

41#
 楼主| 发表于 2021-1-7 10:27:43 | 显示全部楼层
nttwqz 发表于 2021-1-7 10:19
获取磁盘信息需要执行两次diskpart,分配和删除盘符又需要两次,多硬盘系统所在磁盘一般不休眠,但是其 ...

我搞不清楚为啥有的电脑执行起来比较快,大概10秒钟左右(没有秒表测试),有的居然要1-2分钟。似乎不是diskpart本身运行慢的问题。
diskpart,用于中文版、英文版关键字不一样怎么解决?

点评

暂不考虑支持英文版,感觉中文版都没几个人用  详情 回复 发表于 2021-1-7 10:53
回复

使用道具 举报

42#
 楼主| 发表于 2021-1-7 10:33:08 | 显示全部楼层
CodeHz 发表于 2021-1-6 20:35
一顿研究后发现,bcdedit 确定启动磁盘似乎就是读取这个符号链接。。。
直接列出目录然后看符号链接指向 ...

静候佳音!
@CodeHz @plusv大神

点评

你先试试用winobj (sys internals 套件里的那个) 管理员权限打开后能不能在我截图的位置看到正确的结果,可以的话我就做个小工具读(并在已经挂载的情况下拿到盘符)  详情 回复 发表于 2021-1-7 12:12
回复

使用道具 举报

43#
 楼主| 发表于 2021-1-7 10:49:59 | 显示全部楼层
本帖最后由 liuzhaoyzz 于 2021-1-7 10:58 编辑
nttwqz 发表于 2021-1-7 10:39
dpinfo有调试功能,将开头的改为set debug=on
这样会显示各步执行时间,看那一段时间长,在前面加句 c ...

dpinfo在WIN10电脑用时1.7秒。
但是上面的checkbootpartV2有时候慢。看了下用时8秒。

点评

那你在:sel后面加一句cls & echo on并删除后来所有的cls,然后看看那地方慢  详情 回复 发表于 2021-1-7 11:03
回复

使用道具 举报

44#
 楼主| 发表于 2021-1-7 11:13:39 | 显示全部楼层
nttwqz 发表于 2021-1-7 11:03
那你在:sel后面加一句cls & echo on并删除后来所有的cls,然后看看那地方慢

我瞎改了一通,你看看记录。

命令记录.rar

5.6 KB, 下载次数: 1, 下载积分: 无忧币 -2

点评

我的本意是改了之后看哪里卡的时间长。。。  详情 回复 发表于 2021-1-7 11:47
回复

使用道具 举报

45#
 楼主| 发表于 2021-1-7 12:22:16 | 显示全部楼层
本帖最后由 liuzhaoyzz 于 2021-1-7 12:23 编辑
527104427 发表于 2021-1-7 08:16
麻烦看下HKLM\SYSTEM\ControlSet001\Control\\FirmwareBootDevice的值是什么
76楼图1的环境:
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control
FirmwareBootDevice=multi(0)disk(0)rdisk(2)partition(1)


回复

使用道具 举报

46#
 楼主| 发表于 2021-1-7 12:43:05 | 显示全部楼层
本帖最后由 liuzhaoyzz 于 2021-1-7 12:47 编辑
CodeHz 发表于 2021-1-7 12:12
你先试试用winobj (sys internals 套件里的那个) 管理员权限打开后能不能在我截图的位置看到正确的结果 ...
不知道是哪个,盘符怎么对应的

winobj截图.jpg (87.79 KB, 下载次数: 175)

winobj截图.jpg

点评

又深入研究了一下这几个路径,发现它实际上是系统盘所在路径,而非引导分区。。。  详情 回复 发表于 2021-1-7 13:17
回复

使用道具 举报

47#
 楼主| 发表于 2021-1-7 19:17:34 | 显示全部楼层
CodeHz 发表于 2021-1-7 13:33
继续研究了一下,似乎就是\Device\SystemPartition这个路径对应引导分区,至少在我这里是这样的。。。(关 ...

WIN10里面,\Device\SystemPartition这个路径我都没有找到。
GLOBAL??下也没看到啊?

点评

难道是新版本特性吗,,我这构建号是21286( 要不你试试按符号链接排序(就是第三列顶部点一下那个),然后找你的引导分区,看看有没有什么特殊的名字指向它  详情 回复 发表于 2021-1-7 19:36
回复

使用道具 举报

48#
 楼主| 发表于 2021-1-7 20:14:48 来自手机 | 显示全部楼层
我看了,好像没找到有价值的线索
回复

使用道具 举报

49#
 楼主| 发表于 2021-1-8 08:25:21 | 显示全部楼层
nttwqz 发表于 2021-1-7 21:21
重写,不再基于dpinfo,UAC开启时需要重启explorer.exe资源管理器中才会显示,管理员命令行操作请忽略。

等下我测试下,谢谢!

点评

又完善了一下,加入列表显示,无选中功能,找到时背景绿色,否则红色 https://cowtransfer.com/s/afbf13a2b42541  详情 回复 发表于 2021-1-8 11:32
回复

使用道具 举报

50#
 楼主| 发表于 2021-1-8 11:53:36 | 显示全部楼层
nttwqz 发表于 2021-1-8 11:32
又完善了一下,加入列表显示,无选中功能,找到时背景绿色,否则红色
https://cowtransfer.com/s/afbf13 ...

好的,晚点试试。
回复

使用道具 举报

51#
 楼主| 发表于 2021-1-8 12:57:17 | 显示全部楼层
本帖最后由 liuzhaoyzz 于 2021-1-8 16:04 编辑
CodeHz 发表于 2021-1-7 23:24
不管有用没用,先整一个上来试试(源码比较乱,确认有用再修改一下)

测试环境都是WIN8 WIN10,因为WIN7不支持MBR+GPT混合分区启动,未测试。
76楼图1环境: 从ESP分区UEFI启动vhd
firmware 32位的运行出错。
64位的结果好像是对的。

好像是对的。





测试环境76楼图2:从MBR-激活的FAT32分区UEFI启动
firmware 32位的运行出错。
64位的结果好像是对的。





[+] key: FirmwareBootDevice
    [-] arcname: multi(0)disk(0)rdisk(0)partition(1)
    [-] path1: \Device\Harddisk2\Partition1
    [-] path2: \Device\HarddiskVolume1
    [+] mountpoints
       [-] mount point: \??\Volume{ffcb0ea0-0000-0000-0000-200000000000}

BIOS-激活的FAT32分区启动,64位结果应该也是对的。
J:\bak\2下载的文件\判断引导分区\codeHZ>firmware64.exe
[+] key: FirmwareBootDevice
    [-] arcname: multi(0)disk(0)rdisk(0)partition(1)
    [-] path1: \Device\Harddisk2\Partition1
    [-] path2: \Device\HarddiskVolume1
    [+] mountpoints
       [-] mount point: \??\Volume{ffcb0ea0-0000-0000-0000-200000000000}




    [-] path1: \Device\Harddisk2\Partition1,磁盘管理里面有"系统"两个字,是启动分区。












点评

这么神奇吗?我也是读这个位置啊,怎么就不行了呢,难道读注册表也要看人品。。。 [attachimg]472447[/attachimg]  详情 回复 发表于 2021-1-8 18:49
另外是不是需要直接挂载出来呢,这样的话我这里可以省很多计算挂载点的操作,研究了一下,引导分区多半是没默认挂载的)  详情 回复 发表于 2021-1-8 15:35
32位没做过测试就发出来了,看起来是写炸了,一会修一下吧(  详情 回复 发表于 2021-1-8 15:25
回复

使用道具 举报

52#
 楼主| 发表于 2021-1-8 13:03:10 | 显示全部楼层
本帖最后由 liuzhaoyzz 于 2021-1-8 13:10 编辑
nttwqz 发表于 2021-1-8 11:32
又完善了一下,加入列表显示,无选中功能,找到时背景绿色,否则红色
https://cowtransfer.com/s/afbf13 ...

76楼图1环境,从ESP分区UEFI启动vhd,测试结果正确。ESP挂载正常。



76楼图2环境,从MBR-激活的FAT32分区UEFI启动,测试结果正确,但是第一次运行有个出错提示。

再次运行正常。
有时候有这个错误。比如从浏览器的下载窗口直接打开bat:








点评

错误提示不知道什么意思,看起来结果正常显示,我可以将错误屏蔽bcdedit错误不得而知,手动试试能不能显示菜单。  详情 回复 发表于 2021-1-8 14:37
回复

使用道具 举报

53#
 楼主| 发表于 2021-1-8 16:07:17 | 显示全部楼层
CodeHz 发表于 2021-1-8 15:35
另外是不是需要直接挂载出来呢,这样的话我这里可以省很多计算挂载点的操作,研究了一下,引导分区多半是 ...

        如果能够挂载出来分配个盘符最好,最好还提供个卸载盘符的参数,如果没有提供卸载盘符的参数,也没有什么。

点评

你看看上面mountvol的方法win7是否有效(这个是最方便的方法了)  发表于 2021-1-8 16:10
回复

使用道具 举报

54#
 楼主| 发表于 2021-1-8 16:11:44 | 显示全部楼层
本帖最后由 liuzhaoyzz 于 2021-1-8 16:15 编辑
CodeHz 发表于 2021-1-8 15:57
(然后一顿研究之后我发现一个最最最简单的方法。。。
直接 mountvol X: /S
然后在管理员会话里X盘就是当 ...

        mountvol X: /S这个操作肯定是不行的,似乎只能适用于一个硬盘一个ESP分区的情况。不具有适用性。这个命令真的很渣!
guyue2011写的工具挺好用的:挂载GPT硬盘的ESP分区工具--FindESP2.0 - PE讨论区 - 无忧启动论坛 - Powered by Discuz! http://bbs.wuyou.net/forum.php?mod=viewthread&tid=374167
findESP -mount
findESP -unmount
可以挂载所有本地硬盘的ESP分区,也可以卸载本地硬盘所有的ESP分区。(不支持优盘移动硬盘,这个我没有需求)

另外,盘符写入权限的问题,感觉比较麻烦。如果以内置的超级管理员身份登陆好像ESP写入没问题,如果以administrators组的成员访问,或者更低权限的用户访问可能就有问题。这个似乎不在讨论之列,能够实现找到并挂载这个引导分区就行了,剩下的事情让用户自己搞定吧。

点评

[attachimg]472441[/attachimg] 但是我研究了一下,它的原理和我的程序的原理是一致的,也是读取注册表的设置,然后再挂载的 (而且我还为此专门逆向了内核,发现它也是这样获取引导分区的,所以其他方法大概不会  详情 回复 发表于 2021-1-8 16:25
回复

使用道具 举报

55#
 楼主| 发表于 2021-1-8 16:13:48 | 显示全部楼层
nttwqz 发表于 2021-1-8 14:37
错误提示不知道什么意思,看起来结果正常显示,我可以将错误屏蔽bcdedit错误不得而知,手动试试能不能显 ...

从浏览器的下载窗口直接打开bat,可能是因为32位浏览器或者文件管理器,调用了bcdedit是32位的,无法调用64位的导致出错。
回复

使用道具 举报

56#
 楼主| 发表于 2021-1-8 16:20:27 | 显示全部楼层
本帖最后由 liuzhaoyzz 于 2021-1-9 09:30 编辑
你看看上面mountvol的方法win7是否有效(这个是最方便的方法了)


mountvol的方法,适用于XP WIN7 8 10好像。问题是mountvol X: /S这样的肯定不适合的。
mountvol z: \\?\Volume{5a006011-0000-0000-0000-100000000000}\
这样子的命令是具有较好的通用性的,但是需要知道分区的UUID,这样子的命令不但可以挂载ESP盘符,FAT32/NTFS盘符挂载都没问题的。如果你能用windows API在程序内部实现更好,如果不能实现或实现起来费事,就用windows的
mountvol实现也行。

mountvol X: /S这个命令比较渣,建议放弃。

点评

我也考虑过,但是发现mountvol列表至少我的电脑分配完了esp分区没出来,只有/s参数能出来,所以最后用了wmic获取没分配盘符的分区的guid,再用mountvol分配。  详情 回复 发表于 2021-1-8 17:04
回复

使用道具 举报

57#
 楼主| 发表于 2021-1-8 16:24:45 | 显示全部楼层
CodeHz 发表于 2021-1-8 15:25
32位没做过测试就发出来了,看起来是写炸了,一会修一下吧(

32位的程序具有更好的通用性,希望能够在xp下面运行,通杀xp WIN7 8 10,不然的话,批处理调用,还要判断系统版本,稍嫌麻烦。        
回复

使用道具 举报

58#
 楼主| 发表于 2021-1-9 09:19:09 | 显示全部楼层
本帖最后由 liuzhaoyzz 于 2021-1-9 09:38 编辑
CodeHz 发表于 2021-1-8 22:58
你看楼主在用我的程序时的输出,可以看出这里并没有对应关系
我使用的方法是读取Nt内核对象\ArcName\mul ...

早上起来看到了这个消息,CodeHz大神幸苦了!
结果是对的,不过有点小问题。
对于从ESP分区UEFI启动WIN10的情况,firmware-i386.exe程序没有自动挂载盘符,如果我用bootice或者findESP程序挂载个盘符,或者用微软的mountvol z: /s ,firmware-i386.exe还是没有mount,mountpoints下面是空的。

我要向这个启动的ESP分区拷贝文件,必须要给他一个盘符。这个ESP是用于启动的ESP,不是其他硬盘的ESP,是特定的ESP分区。



另外想请问下,这个firmware-i386.exe不依赖于bcdedit吧?如果bcdedit不能运行的情况,firmware-i386.exe能否正常出结果?是否有管理员要求?能否通杀XP WIN7 8 10,我不想事先先判断操作系统版本,再运行firmware-i386.exe。

esp没有挂载.jpg (43.08 KB, 下载次数: 130)

esp没有挂载.jpg

点评

所以是 mountvol z: /s 成功了也没有挂载点吗,这就有点奇怪了。。有没有可以复现的镜像(  详情 回复 发表于 2021-1-9 09:41
回复

使用道具 举报

59#
 楼主| 发表于 2021-1-9 10:48:12 来自手机 | 显示全部楼层
本帖最后由 liuzhaoyzz 于 2021-1-9 10:55 编辑
CodeHz 发表于 2021-1-9 09:41
所以是 mountvol z: /s 成功了也没有挂载点吗,这就有点奇怪了。。有没有可以复现的镜像(另外这东西是不 ...


       我确认了,mountvol z: /s 成功了没有挂载点,我的电脑里面已经有ESP的盘符了 。

重现问题的镜像?我搞了个GPT分区的物理硬盘,从这个物理硬盘的ESP分区bootmgfw.efi引导→BCD→加载某个WIN10.VHD以UEFI启动WIN10,你只要有个GPT分区的硬盘,外加随便安装个系统到vhd即可,不需要我的vhd啊。

或者从虚拟机里面应该也能够重现环境吧。虚拟机里面用GPT分区,然后装个系统到VHD中。
回复

使用道具 举报

60#
 楼主| 发表于 2021-1-9 10:49:37 来自手机 | 显示全部楼层
CodeHz 发表于 2021-1-9 09:51
另外看了一眼文档,好像是可以在没有guid挂载点的情况下强行挂载的,不过我看还是会受到mountvol一样的管理 ...

        权限问题如果你能够解决当然是最好的了,如果不能解决,给ESP分配个盘符也行,剩下的问题再想办法吧。

点评

只是不能用explorer复制文件而已,反正提权以后的批处理是可以访问的)  详情 回复 发表于 2021-1-9 11:30
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-5-20 22:13

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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