无忧启动论坛

标题: 请问下有没有办法用批处理或者命令行小程序确定系统引导分区? [打印本页]

作者: liuzhaoyzz    时间: 2020-12-24 08:56
标题: 请问下有没有办法用批处理或者命令行小程序确定系统引导分区?
本帖最后由 liuzhaoyzz 于 2020-12-24 09:56 编辑

请问下有没有办法用批处理或者命令行小程序确定系统引导分区?
       有时候系统引导分区不一定是C盘,比如对于VHD系统,引导分区可能是G: H:这样子的磁盘,甚至可能没有盘符,如果当前系统是WIN7 8 10,包括BIOS和UEFI环境下,有没有好的办法确定系统的“引导分区”,并且能够自动分配盘符?如果windows有相关的命令最好,比如wmic什么的,如果没有,有没有人能够写个小程序来确定系统引导分区?希望是c/c++/delphi/au3/autohotkey之类的。有没有windows API能够搞定这个?实在不行,pecmd也行,pecmd的问题是需要过360这个烦人的坎,需要很尴尬地“面向360编程”,向别人解释没有病毒太累了。
      我所考虑的问题:
      1、BIOS下面,引导分区是活动分区,遍历活动分区没有问题,问题是有可能有多个硬盘,每个硬盘都有活动分区,活动分区里面可能都有bootmgr这样子的文件,难以区分。另外还有交叉引导的问题,即硬盘0上的引导文件引导硬盘1上的系统,硬盘1上的引导文件引导硬盘0上的系统。
      2、UEFI下面,磁盘分区可能是MBR/GPT的。
(1)对于GPT硬盘,一般来说ESP分区是引导分区,但不排除一个GPT硬盘有多个ESP分区的情况,甚至有的硬盘根本不需要ESP分区,主板原生支持NTFS,全部都是NTFS分区一样可以UEFI启动。
(2)对于MBR硬盘,引导分区可能是FAT32分区,甚至不需要FAT32分区,主板原生支持NTFS,引导分区可能是某一个NTFS分区。还有多个物理硬盘的情况,多个分区可能都会存在H:\EFI\Microsoft\Boot\bootmgfw.efi这样的文件,比较复杂。
      有没有好的办法用批处理或者命令行小程序确定这个“引导分区”?有没有“现成的”小程序或者方案,不需要“重复造轮子”的?在此先谢过了!


作者: cchessbd    时间: 2020-12-24 09:36
这个多硬盘多系统的话比较复杂,如果是存在隐藏分区的话,还得显示隐藏分区。然而有些分区格式是linux爱好者的,还有些分区id是0的隐藏分区。。。说不定一不小心显示出来就给误格式化了(win系统对不识别分区会出来格式化提示)。。。所以说如果多硬盘是比较大的一个工程。简单一点的处理就是只处理可见分区,单硬盘最简单把。
作者: liuzhaoyzz    时间: 2020-12-24 09:40
本帖最后由 liuzhaoyzz 于 2020-12-24 09:41 编辑
cchessbd 发表于 2020-12-24 09:36
这个多硬盘多系统的话比较复杂,如果是存在隐藏分区的话,还得显示隐藏分区。然而有些分区格式是linux爱好 ...

确实存在如你所说的潜在隐患。只处理可见分区的话,对于vhd系统,引导分区就需要先手工分配盘符了。
作者: 江南一根葱    时间: 2020-12-24 10:16
你这个就有点像开了多个dhcp,该从哪个dhcp启动的问题了。
不过我也想知道win是怎么知道从哪启动的。比如我在弄一启是从Grub2启动的方案

作者: 23456    时间: 2020-12-24 10:22
HKEY_LOCAL_MACHINE\SYSTEM\Setup   
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion   两个研究下看看
作者: ahxx    时间: 2020-12-24 11:07
从楼主的问题中学到了知识
作者: liuzhaoyzz    时间: 2020-12-24 11:57
23456 发表于 2020-12-24 10:22
HKEY_LOCAL_MACHINE\SYSTEM\Setup   
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion  ...

HKEY_LOCAL_MACHINE\SYSTEM\Setup
找到了SystemPartition=\Device\HarddiskVolume6,这个不知道怎么跟盘符对应起来?

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion
PathName=C:\Windows
SystemRoot=C:\Windows
没有什么有价值的线索。


作者: liuzhaoyzz    时间: 2020-12-24 11:57
ahxx 发表于 2020-12-24 11:07
从楼主的问题中学到了知识

厉害,从问题中还能学到知识啊?!
作者: Climbing    时间: 2020-12-24 12:46
Windows是可以直接从软盘映像中启动的,这个就相当于没有启动分区。对于这种情况你怎么办?

而且,这个问题主要针对MBR格式的硬盘,所谓的启动分区,一般情况下就是当前激活主分区。

对于UEFI来说,固定的就是ESP分区。
作者: liuzhaoyzz    时间: 2020-12-24 13:59
Climbing 发表于 2020-12-24 12:46
Windows是可以直接从软盘映像中启动的,这个就相当于没有启动分区。对于这种情况你怎么办?

而且,这个 ...

        从软盘映像中启动这种极端情况就不用考虑了,我只想研究下从本地硬盘启动的情况。就是bootmgr/bootmgfw.efi→windows的情况。
作者: CodeHz    时间: 2020-12-24 17:55
试试
wmic partition where 'BootPartition="TRUE"' get DeviceID,BootPartition
作者: bfgxp    时间: 2020-12-24 18:17
呵呵,曾经非常迷恋vhd系统,后来写eit的时候就思考过楼主这样的问题,面对各种可能性真的让人头痛,最后还是不管了,直接由bcdboot.exe处理,如果错了再手工处理。

搭车问个问题,有没有简单的命令判断硬盘是否SSD?
作者: 窄口牛    时间: 2020-12-24 18:20
先判断到主引导是啥再说。
作者: liuzhaoyzz    时间: 2020-12-24 18:40
CodeHz 发表于 2020-12-24 17:55
试试
wmic partition where 'BootPartition="TRUE"' get DeviceID,BootPartition

几个硬盘都是true,怎么判断?

QQ拼音截图20201224183905.png (17.92 KB, 下载次数: 350)

QQ拼音截图20201224183905.png

作者: liuzhaoyzz    时间: 2020-12-24 19:03
本帖最后由 liuzhaoyzz 于 2020-12-24 19:09 编辑
bfgxp 发表于 2020-12-24 18:17
呵呵,曾经非常迷恋vhd系统,后来写eit的时候就思考过楼主这样的问题,面对各种可能性真的让人头痛,最后还 ...
搭车问个问题,有没有简单的命令判断硬盘是否SSD?

你为啥不重新开个帖子???
clonecd很早写的有个,不是很完善,对于nvme ssd,需要根据关键字“nvme”自己确定,sata ssd的话似乎可以。另外有些版本最多支持19个硬盘分区。
本人写的一个小工具,看看是否能区分移动硬盘和本地U盘(2013-1-28更新) - PE讨论区 - 无忧启动论坛 - Powered by Discuz! http://wuyou.net/forum.php?mod=viewthread&tid=273557

请拥有SSD硬盘者测试CLONECD的最新DRVTYPE - PE讨论区 - 无忧启动论坛 - Powered by Discuz! http://bbs.wuyou.net/forum.php?m ... 10354&extra=&page=1

clonecd的源代码已全部丢失。


作者: nttwqz    时间: 2020-12-24 19:08
如果楼主不嫌慢的话,dpinfo应该绰绰有余了
作者: liuzhaoyzz    时间: 2020-12-24 19:10
nttwqz 发表于 2020-12-24 19:08
如果楼主不嫌慢的话,dpinfo应该绰绰有余了

dpinfo是什么程序?我没用过。
作者: liuzhaoyzz    时间: 2020-12-24 19:11
窄口牛 发表于 2020-12-24 18:20
先判断到主引导是啥再说。

假设主引导是bootmgr/bootmgfw.efi的话,然后呢?
作者: nttwqz    时间: 2020-12-24 19:13
liuzhaoyzz 发表于 2020-12-24 19:10
dpinfo是什么程序?我没用过。

咳咳~批处理,处理diskpart获取的信息。
作者: 窄口牛    时间: 2020-12-24 19:22
只考虑win的话wmic就行吧,那些搞自动修复引导的肯定会。
作者: liuzhaoyzz    时间: 2020-12-24 19:43
nttwqz 发表于 2020-12-24 19:13
咳咳~批处理,处理diskpart获取的信息。

你写的可有程序?请给我网址我看看,谢谢!
作者: nttwqz    时间: 2020-12-24 20:40
liuzhaoyzz 发表于 2020-12-24 19:43
你写的可有程序?请给我网址我看看,谢谢!

http://bbs.wuyou.net/forum.php?mod=viewthread&tid=409570
diskpart启动速度可是很慢的,你要有点心理准备。

脚本显示的信息和未显示的信息都是变量,可直接使用,末尾有注释
作者: liuzhaoyzz    时间: 2020-12-24 21:30
本帖最后由 liuzhaoyzz 于 2020-12-24 21:33 编辑
nttwqz 发表于 2020-12-24 20:40
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=409570
diskpart启动速度可是很慢的,你要有点心理 ...

速度挺快的,2秒多点。我想要的引导分区,从哪里知道?我看了导出的txt,信息量很大啊?
我想要知道的是,我当前的系统,是从哪个磁盘哪个分区引导的。
dpinfo好像是遍历各个硬盘,显示分区信息?
作者: liuzhaoyzz    时间: 2020-12-24 21:32
窄口牛 发表于 2020-12-24 19:22
只考虑win的话wmic就行吧,那些搞自动修复引导的肯定会。

wmic那个参数,能知道我当前的系统是从那个分区引导的吗?

搞引导修复的,好像引导分区也是让用户手工输入的。
作者: nttwqz    时间: 2020-12-24 22:04
liuzhaoyzz 发表于 2020-12-24 21:30
速度挺快的,2秒多点。我想要的引导分区,从哪里知道?我看了导出的txt,信息量很大啊?
我想要知道的是 ...

dpinfo应该不具备直接显示当前系统是从哪个分区启动的,毕竟这个是磁盘分区信息工具。。。

不过可以遍历进行判断,我发现我这启动磁盘只有一个,哪怕插了启动U盘也是如此,不知道多硬盘都启动的是什么值,如果永远只有一个是启动磁盘,那么无非就是判断该磁盘的活动或者ESP分区。但这样还是麻烦,有更简单的办法。

bcdedit /enum {bootmgr}结果中device的值应该就是当前系统的引导分区,这个值和wmic os get bootdevice结果一致。我的bootdevice是\Device\HarddiskVolume1,不知道是不是都是这个格式,看不懂什么意思,这是磁盘第一个卷???如果是的话,那就好办了,(sel vol 1&assign)|diskpart分配格盘符就好。
作者: nttwqz    时间: 2020-12-24 22:10
liuzhaoyzz 发表于 2020-12-24 09:40
确实存在如你所说的潜在隐患。只处理可见分区的话,对于vhd系统,引导分区就需要先手工分配盘符了。

vhd添加到当前系统启动项无需知道启动分区

挂载VHD,比如盘符Y:

bcdboot Y:\Windows /d /addlast
作者: 窄口牛    时间: 2020-12-24 22:33
好几个人做了自动修复引导,比如蜜蜜,杏雨梨云,程祥都有自动修复引导。
作者: liuzhaoyzz    时间: 2020-12-25 08:13
nttwqz 发表于 2020-12-24 22:04
dpinfo应该不具备直接显示当前系统是从哪个分区启动的,毕竟这个是磁盘分区信息工具。。。

不过可以遍 ...

遍历的话,就存在我在一楼所说的那些问题,包括BIOS和UEFI下面的。
bcdedit /enum {bootmgr}的结果好像也不是系统的引导分区,应该指向的是包含windows目录那个分区,对于vhd,就是指向vhd所在的分区。

作者: liuzhaoyzz    时间: 2020-12-25 08:14
nttwqz 发表于 2020-12-24 22:10
vhd添加到当前系统启动项无需知道启动分区

挂载VHD,比如盘符Y:

        我所使用的场景,要求给这个启动分区分配一个盘符,用于拷贝文件,不单单是修改引导分区的BCD。
作者: liuzhaoyzz    时间: 2020-12-25 08:15
窄口牛 发表于 2020-12-24 22:33
好几个人做了自动修复引导,比如蜜蜜,杏雨梨云,程祥都有自动修复引导。

        问题很多都是闭源的,另外不知道他们的软件是否能够确定我在一楼所说的引导分区?
作者: nttwqz    时间: 2020-12-25 08:39
liuzhaoyzz 发表于 2020-12-25 08:13
遍历的话,就存在我在一楼所说的那些问题,包括BIOS和UEFI下面的。
bcdedit /enum {bootmgr}的结果好像 ...

我这边看了两台,一台是gpt uefi esp分区隐藏,一台是mbr uefi 活动分区隐藏,启动分区的值均正确,和Win不是一个分区
作者: liuzhaoyzz    时间: 2020-12-25 08:41
nttwqz 发表于 2020-12-25 08:39
我这边看了两台,一台是gpt uefi esp分区隐藏,一台是mbr uefi 活动分区隐藏,启动分区的值均正确,和Win ...

你说的情况,是正常的系统,还是vhd系统?        
作者: tao616106631    时间: 2020-12-25 09:36
围观一下,看看有什么好的解决方案
作者: nttwqz    时间: 2020-12-25 10:26
本帖最后由 nttwqz 于 2020-12-25 10:36 编辑
liuzhaoyzz 发表于 2020-12-25 08:14
我所使用的场景,要求给这个启动分区分配一个盘符,用于拷贝文件,不单单是修改引导分区的BCD。


目前两台启动磁盘只有一个是,这样即确定了启动磁盘又确定了启动分区,如果有多个esp(实际从未遇到)可尝试分析bcd文件。
试了PE环境,启动磁盘全部为否
作者: nttwqz    时间: 2020-12-25 10:29
liuzhaoyzz 发表于 2020-12-25 08:41
你说的情况,是正常的系统,还是vhd系统?

正常系统
作者: nttwqz    时间: 2020-12-25 17:32
有一台\Device\HarddiskVolume1不是卷1的情况,看来不是卷名或者不准确
作者: liuzhaoyzz    时间: 2020-12-26 17:11
nttwqz 发表于 2020-12-25 17:32
有一台\Device\HarddiskVolume1不是卷1的情况,看来不是卷名或者不准确

我估计就不怎么靠谱,还是有点复杂的。
作者: liuzhaoyzz    时间: 2020-12-28 07:22
本帖最后由 liuzhaoyzz 于 2020-12-28 07:35 编辑
527104427 发表于 2020-12-27 23:32
再来个一箭五雕:ChkMbrPbr.exe   -chkbootpart

感谢5大出手!
5大一出手,就知有没有!
试了下,不但准确地找到了启动盘符,如果启动盘符没有分配盘符,可以精准给他分配个盘符!

另外,抱歉请允许我问个比较傻逼的问题,怎么逃避360的追杀,大家都知道是误报,我的问题是,该怎么“面向360”编程?向别人解释没有病毒,太累了,所以我喜欢c/c++编译的程序,被360追杀的几率要低点。ChkMbrPbr.exe我提交了误报反馈,360根本就不给过,好烦人!在我们办公室,我看了下360的装机率非常之高,我推测在外面装机率也很高。





作者: liuzhaoyzz    时间: 2020-12-28 09:52
527104427 发表于 2020-12-28 09:47
据说国家要对马云爸爸动手了,如果没有意外的话,老头子们不会对这些流氓软件坐视不管的,我们就暗中观察 ...

        马云说的太多,国家搞他只需要下文件即可,一晚上阿里巴巴就蒸发了6000亿元,现在还在搞反垄断调查,说阿里巴巴搞垄断。360安全卫士装机率可真高啊。
作者: freesoft00    时间: 2020-12-28 09:59
527104427 发表于 2020-12-28 09:47
据说国家要对马云爸爸动手了,如果没有意外的话,老头子们不会对这些流氓软件坐视不管的,我们就暗中观察 ...

cgi有个问题,纯键盘模式,下拉列表按方向下选择映像,只要是iso或者wim就自动加载并显示映像号了,并不能下来出来列表。每按一次显示一个,有很多映像的话,点击很多次才能找到真正的映像文件
作者: freesoft00    时间: 2020-12-28 14:41
527104427 发表于 2020-12-28 11:57
主界面,先按TAB激活下拉列表,再按住ALT不放,然后按↓,即可弹出列表

en 好的
习惯cgi了
作者: nttwqz    时间: 2020-12-28 16:11
liuzhaoyzz 发表于 2020-12-28 07:22
感谢5大出手!
5大一出手,就知有没有!试了下,不但准确地找到了启动盘符,如果启动盘符没有分配盘符, ...

过360估计够呛,我写的好几个纯批处理都被360报木马了,谁知道是哪些代码被识别成木马行为
作者: liuzhaoyzz    时间: 2020-12-28 21:18
nttwqz 发表于 2020-12-28 16:11
过360估计够呛,我写的好几个纯批处理都被360报木马了,谁知道是哪些代码被识别成木马行为

做个程序员容易吗?!到处被360追杀啊!
作者: liuzhaoyzz    时间: 2021-1-2 21:23
报告下5大,@527104427,ChkMbrPbr -ChkBootPart结果不准确,GPT分区启动vhd,如果vhd是MBR格式的FAT32+NTFS分区,结果定位到FAT32分区,实际上应该是原来的ESP分区;如果vhd是MBR格式的NTFS分区,则结果为空值,正确的结果应该是GPT分区的ESP分区。
作者: liuzhaoyzz    时间: 2021-1-3 09:50
本帖最后由 liuzhaoyzz 于 2021-1-3 10:01 编辑
527104427 发表于 2021-1-3 09:38
分别运行bcdedit /enum {bootmgr}看看结果
两个vhd能否上传?有空研究看看

C:\Users\Administrator>bcdedit /enum {bootmgr}

Windows 启动管理器
--------------------
标识符                  {bootmgr}
device                  boot
path                    \EFI\Boot\bootx64.efi
description             Windows Boot Manager (UEFI)
inherit                 {globalsettings}
nointegritychecks       No
default                 {default}
resumeobject            {c2b94580-44c2-11e9-8fb0-e9e1b17ba752}
displayorder            {default}
                        {8b334c27-4ce9-11eb-accb-2c56dc7b4701}
                        {current}
                        {d50d2124-73ad-49fe-997f-395e9a4db9e8}
toolsdisplayorder       {memdiag}
timeout                 2
displaybootmenu         Yes






bcdedit /enum all >i:\111.txt


固件启动管理器
---------------------
标识符                  {fwbootmgr}
displayorder            {eb620936-4ceb-11eb-8251-806e6f6e6963}
                        {eb620937-4ceb-11eb-8251-806e6f6e6963}
                        {eb620938-4ceb-11eb-8251-806e6f6e6963}
                        {eb620939-4ceb-11eb-8251-806e6f6e6963}
                        {eb62093a-4ceb-11eb-8251-806e6f6e6963}
                        {eb62093b-4ceb-11eb-8251-806e6f6e6963}
timeout                 2

Windows 启动管理器
--------------------
标识符                  {bootmgr}
device                  boot
path                    \EFI\Boot\bootx64.efi
description             Windows Boot Manager (UEFI)
inherit                 {globalsettings}
nointegritychecks       No
default                 {default}
resumeobject            {c2b94580-44c2-11e9-8fb0-e9e1b17ba752}
displayorder            {default}
                        {8b334c27-4ce9-11eb-accb-2c56dc7b4701}
                        {current}
                        {d50d2124-73ad-49fe-997f-395e9a4db9e8}
toolsdisplayorder       {memdiag}
timeout                 2
displaybootmenu         Yes

固件应用程序(101fffff)
-------------------------------
标识符                  {eb620936-4ceb-11eb-8251-806e6f6e6963}
description             硬盘

固件应用程序(101fffff)
-------------------------------
标识符                  {eb620937-4ceb-11eb-8251-806e6f6e6963}
device                  partition=J:
path                    \EFI\MICROSOFT\BOOT\BOOTMGFW.EFI
description             \EFI\Microsoft\Boot\bootmgfw.efi

固件应用程序(101fffff)
-------------------------------
标识符                  {eb620938-4ceb-11eb-8251-806e6f6e6963}
device                  partition=J:
path                    \EFI\BOOT\GRUBX64.EFI
description             \EFI\boot\grubx64.efi

固件应用程序(101fffff)
-------------------------------
标识符                  {eb620939-4ceb-11eb-8251-806e6f6e6963}
device                  partition=J:
path                    \EFI\BOOT\GRUB2X64.EFI
description             \EFI\boot\grub2x64.efi

固件应用程序(101fffff)
-------------------------------
标识符                  {eb62093a-4ceb-11eb-8251-806e6f6e6963}
device                  partition=J:
path                    \EFI\BOOT\BOOTX64.EFI
description             \EFI\boot\BOOTX64.EFI

固件应用程序(101fffff)
-------------------------------
标识符                  {eb62093b-4ceb-11eb-8251-806e6f6e6963}
device                  partition=\Device\HarddiskVolume7
path                    \EFI\MICROSOFT\BOOT\BOOTMGFW.EFI
description             Windows Boot Manager

Windows 启动加载器
-------------------
标识符                  {8b334c27-4ce9-11eb-accb-2c56dc7b4701}
device                  ramdisk=[L:]\boot\imgs\SXPE\boot.wim,{8adac786-4ce9-11eb-accb-2c56dc7b4701}
description             SXPE\boot.wim
locale                  zh-CN
nointegritychecks       Yes
osdevice                ramdisk=[L:]\boot\imgs\SXPE\boot.wim,{8adac786-4ce9-11eb-accb-2c56dc7b4701}
systemroot              \windows
detecthal               No
winpe                   Yes

Windows 启动加载器
-------------------
标识符                  {default}
device                  boot
path                    \Windows\System32\Winload.efi
description             Windows  x64 UEFI
inherit                 {bootloadersettings}
isolatedcontext         Yes
allowedinmemorysettings 0x15000075
osdevice                boot
systemroot              \Windows
resumeobject            {c2b94580-44c2-11e9-8fb0-e9e1b17ba752}
nx                      OptIn
pae                     Default
bootmenupolicy          Legacy

Windows 启动加载器
-------------------
标识符                  {current}
device                  partition=C:
path                    \Windows\system32\winload.efi
description             \VHD\FTW81.vhd
locale                  zh-CN
osdevice                partition=C:
systemroot              \Windows
resumeobject            {eb62093c-4ceb-11eb-8251-806e6f6e6963}
bootmenupolicy          Legacy
detecthal               Yes

Windows 启动加载器
-------------------
标识符                  {d50d2124-73ad-49fe-997f-395e9a4db9e8}
device                  vhd=[I:]\vhd\UEFIltsb-svbus.vhd
path                    \Windows\system32\winload.efi
description             \vhd\UEFIltsb-svbus
locale                  zh-CN
osdevice                vhd=[I:]\vhd\UEFIltsb-svbus.vhd
systemroot              \Windows
resumeobject            {409f26ae-4cee-11eb-9bed-806e6f6e6963}
bootmenupolicy          Legacy
detecthal               Yes

从休眠状态恢复
---------------------
标识符                  {409f26ae-4cee-11eb-9bed-806e6f6e6963}
device                  vhd=[I:]\vhd\UEFIltsb-svbus.vhd
path                    \Windows\system32\winresume.efi
description             \vhd\UEFIltsb-svbus
locale                  zh-CN
inherit                 {resumeloadersettings}
filedevice              vhd=[I:]\vhd\UEFIltsb-svbus.vhd
filepath                \hiberfil.sys
debugoptionenabled      No

从休眠状态恢复
---------------------
标识符                  {c2b94580-44c2-11e9-8fb0-e9e1b17ba752}
device                  boot
path                    \Windows\System32\Winresume.efi
description             Windows Resume Application
locale                  zh-CN
inherit                 {resumeloadersettings}
isolatedcontext         Yes
allowedinmemorysettings 0x15000075
filepath                \hiberfil.sys
bootmenupolicy          Standard

从休眠状态恢复
---------------------
标识符                  {eb62093c-4ceb-11eb-8251-806e6f6e6963}
device                  partition=C:
path                    \Windows\system32\winresume.efi
description             \VHD\FTW81.vhd
locale                  zh-CN
inherit                 {resumeloadersettings}
filedevice              partition=C:
filepath                \hiberfil.sys
debugoptionenabled      No

Windows 内存测试程序
---------------------
标识符                  {memdiag}
device                  boot
path                    \EFI\Microsoft\Boot\memtest.efi
description             Windows 内存诊断
locale                  zh-CN
inherit                 {globalsettings}
badmemoryaccess         Yes

EMS 设置
------------
标识符                  {emssettings}
bootems                 No

调试器设置
-----------------
标识符                  {dbgsettings}
debugtype               Serial
debugport               1
baudrate                115200

RAM 故障
-----------
标识符                  {badmemory}

全局设置
---------------
标识符                  {globalsettings}
inherit                 {dbgsettings}
                        {emssettings}
                        {badmemory}

启动加载器设置
--------------------
标识符                  {bootloadersettings}
inherit                 {globalsettings}
                        {hypervisorsettings}

虚拟机监控程序设置
-------------------
标识符                  {hypervisorsettings}
hypervisordebugtype     Serial
hypervisordebugport     1
hypervisorbaudrate      115200

恢复加载器设置
----------------------
标识符                  {resumeloadersettings}
inherit                 {globalsettings}

设备选项
--------------
标识符                  {8adac786-4ce9-11eb-accb-2c56dc7b4701}
description             SXPE\boot.wim
ramdisksdidevice        boot
ramdisksdipath          \boot\boot.sdi

安装程序 Ramdisk 选项
---------------------
标识符                  {ramdiskoptions}
ramdisksdidevice        boot
ramdisksdipath          \EFI\Microsoft\Boot\boot.sdi



vhd是面向机器的啊,最好你那边自己安装个试试看。我等下传到天翼云盘。你是要安装之后的vhd,还是我安装之前的原安装包,xxx.esd?我这个vhd有6GB,挺大的。



作者: liuzhaoyzz    时间: 2021-1-3 10:40
本帖最后由 liuzhaoyzz 于 2021-1-3 12:19 编辑

https://ws28.cn/f/4dlphgzafla
4.7GB的vhd,下载要费点时间。这个文叔叔,7天限制。

bcdedit /enum all>112.txt
固件启动管理器
---------------------
标识符                  {fwbootmgr}
displayorder            {eb620936-4ceb-11eb-8251-806e6f6e6963}
                        {eb620937-4ceb-11eb-8251-806e6f6e6963}
                        {eb620938-4ceb-11eb-8251-806e6f6e6963}
                        {eb620939-4ceb-11eb-8251-806e6f6e6963}
                        {eb62093a-4ceb-11eb-8251-806e6f6e6963}
                        {eb62093b-4ceb-11eb-8251-806e6f6e6963}
timeout                 2

Windows 启动管理器
--------------------
标识符                  {bootmgr}
device                  boot
path                    \EFI\Boot\bootx64.efi
description             Windows Boot Manager (UEFI)
inherit                 {globalsettings}
nointegritychecks       No
default                 {default}
resumeobject            {c2b94580-44c2-11e9-8fb0-e9e1b17ba752}
displayorder            {default}
                        {8b334c27-4ce9-11eb-accb-2c56dc7b4701}
                        {c9790e03-94f0-4054-9807-42f543c3213f}
                        {d50d2124-73ad-49fe-997f-395e9a4db9e8}
                        {current}
toolsdisplayorder       {memdiag}
timeout                 2
displaybootmenu         Yes

固件应用程序(101fffff)
-------------------------------
标识符                  {eb620936-4ceb-11eb-8251-806e6f6e6963}
description             硬盘

固件应用程序(101fffff)
-------------------------------
标识符                  {eb620937-4ceb-11eb-8251-806e6f6e6963}
device                  partition=F:
path                    \EFI\MICROSOFT\BOOT\BOOTMGFW.EFI
description             \EFI\Microsoft\Boot\bootmgfw.efi

固件应用程序(101fffff)
-------------------------------
标识符                  {eb620938-4ceb-11eb-8251-806e6f6e6963}
device                  partition=F:
path                    \EFI\BOOT\GRUBX64.EFI
description             \EFI\boot\grubx64.efi

固件应用程序(101fffff)
-------------------------------
标识符                  {eb620939-4ceb-11eb-8251-806e6f6e6963}
device                  partition=F:
path                    \EFI\BOOT\GRUB2X64.EFI
description             \EFI\boot\grub2x64.efi

固件应用程序(101fffff)
-------------------------------
标识符                  {eb62093a-4ceb-11eb-8251-806e6f6e6963}
device                  partition=F:
path                    \EFI\BOOT\BOOTX64.EFI
description             \EFI\boot\BOOTX64.EFI

固件应用程序(101fffff)
-------------------------------
标识符                  {eb62093b-4ceb-11eb-8251-806e6f6e6963}
device                  partition=\Device\HarddiskVolume7
path                    \EFI\MICROSOFT\BOOT\BOOTMGFW.EFI
description             Windows Boot Manager

Windows 启动加载器
-------------------
标识符                  {8b334c27-4ce9-11eb-accb-2c56dc7b4701}
device                  ramdisk=[I:]\boot\imgs\SXPE\boot.wim,{8adac786-4ce9-11eb-accb-2c56dc7b4701}
description             SXPE\boot.wim
locale                  zh-CN
nointegritychecks       Yes
osdevice                ramdisk=[I:]\boot\imgs\SXPE\boot.wim,{8adac786-4ce9-11eb-accb-2c56dc7b4701}
systemroot              \windows
detecthal               No
winpe                   Yes

Windows 启动加载器
-------------------
标识符                  {default}
device                  boot
path                    \Windows\System32\Winload.efi
description             Windows  x64 UEFI
inherit                 {bootloadersettings}
isolatedcontext         Yes
allowedinmemorysettings 0x15000075
osdevice                boot
systemroot              \Windows
resumeobject            {c2b94580-44c2-11e9-8fb0-e9e1b17ba752}
nx                      OptIn
pae                     Default
bootmenupolicy          Legacy

Windows 启动加载器
-------------------
标识符                  {c9790e03-94f0-4054-9807-42f543c3213f}
device                  vhd=[H:]\VHD\FTW81.vhd
path                    \Windows\system32\winload.efi
description             \VHD\FTW81.vhd
locale                  zh-CN
osdevice                vhd=[H:]\VHD\FTW81.vhd
systemroot              \Windows
resumeobject            {eb62093c-4ceb-11eb-8251-806e6f6e6963}
bootmenupolicy          Legacy
detecthal               Yes

Windows 启动加载器
-------------------
标识符                  {d50d2124-73ad-49fe-997f-395e9a4db9e8}
device                  vhd=[H:]\vhd\UEFIltsb-svbus.vhd
path                    \Windows\system32\winload.efi
description             \vhd\UEFIltsb-svbus.vhd
locale                  zh-CN
osdevice                vhd=[H:]\vhd\UEFIltsb-svbus.vhd
systemroot              \Windows
resumeobject            {409f26ae-4cee-11eb-9bed-806e6f6e6963}
bootmenupolicy          Legacy
detecthal               Yes

Windows 启动加载器
-------------------
标识符                  {current}
device                  partition=C:
path                    \Windows\system32\winload.efi
description             \vhd\UEFIltsb2.vhd
locale                  zh-CN
osdevice                partition=C:
systemroot              \Windows
resumeobject            {5ce1aa43-4d6c-11eb-9bd1-806e6f6e6963}
bootmenupolicy          Legacy
detecthal               Yes

从休眠状态恢复
---------------------
标识符                  {409f26ae-4cee-11eb-9bed-806e6f6e6963}
device                  vhd=[H:]\vhd\UEFIltsb-svbus.vhd
path                    \Windows\system32\winresume.efi
description             \vhd\UEFIltsb-svbus
locale                  zh-CN
inherit                 {resumeloadersettings}
filedevice              vhd=[H:]\vhd\UEFIltsb-svbus.vhd
filepath                \hiberfil.sys
debugoptionenabled      No

从休眠状态恢复
---------------------
标识符                  {5ce1aa43-4d6c-11eb-9bd1-806e6f6e6963}
device                  partition=C:
path                    \Windows\system32\winresume.efi
description             \vhd\UEFIltsb2.vhd
locale                  zh-CN
inherit                 {resumeloadersettings}
filedevice              partition=C:
filepath                \hiberfil.sys
debugoptionenabled      No

从休眠状态恢复
---------------------
标识符                  {c2b94580-44c2-11e9-8fb0-e9e1b17ba752}
device                  boot
path                    \Windows\System32\Winresume.efi
description             Windows Resume Application
locale                  zh-CN
inherit                 {resumeloadersettings}
isolatedcontext         Yes
allowedinmemorysettings 0x15000075
filepath                \hiberfil.sys
bootmenupolicy          Standard

从休眠状态恢复
---------------------
标识符                  {eb62093c-4ceb-11eb-8251-806e6f6e6963}
device                  vhd=[H:]\VHD\FTW81.vhd
path                    \Windows\system32\winresume.efi
description             \VHD\FTW81.vhd
locale                  zh-CN
inherit                 {resumeloadersettings}
filedevice              vhd=[H:]\VHD\FTW81.vhd
filepath                \hiberfil.sys
debugoptionenabled      No

Windows 内存测试程序
---------------------
标识符                  {memdiag}
device                  boot
path                    \EFI\Microsoft\Boot\memtest.efi
description             Windows 内存诊断
locale                  zh-CN
inherit                 {globalsettings}
badmemoryaccess         Yes

EMS 设置
------------
标识符                  {emssettings}
bootems                 No

调试器设置
-----------------
标识符                  {dbgsettings}
debugtype               Serial
debugport               1
baudrate                115200

RAM 故障
-----------
标识符                  {badmemory}

全局设置
---------------
标识符                  {globalsettings}
inherit                 {dbgsettings}
                        {emssettings}
                        {badmemory}

启动加载器设置
--------------------
标识符                  {bootloadersettings}
inherit                 {globalsettings}
                        {hypervisorsettings}

虚拟机监控程序设置
-------------------
标识符                  {hypervisorsettings}
hypervisordebugtype     Serial
hypervisordebugport     1
hypervisorbaudrate      115200

恢复加载器设置
----------------------
标识符                  {resumeloadersettings}
inherit                 {globalsettings}

设备选项
--------------
标识符                  {8adac786-4ce9-11eb-accb-2c56dc7b4701}
description             SXPE\boot.wim
ramdisksdidevice        boot
ramdisksdipath          \boot\boot.sdi

安装程序 Ramdisk 选项
---------------------
标识符                  {ramdiskoptions}
ramdisksdidevice        boot
ramdisksdipath          \EFI\Microsoft\Boot\boot.sdi



作者: liuzhaoyzz    时间: 2021-1-3 15:44
527104427 发表于 2021-1-3 13:17
顺便把你的bcd文件传上来研究下

你看下。

BCD.rar

7.83 KB, 下载次数: 4, 下载积分: 无忧币 -2


作者: nttwqz    时间: 2021-1-3 18:36
到底还是需要分析bcd了吗?
作者: liuzhaoyzz    时间: 2021-1-3 19:00
nttwqz 发表于 2021-1-3 18:36
到底还是需要分析bcd了吗?

不知道呢,看5大的分析结论吧。
作者: liuzhaoyzz    时间: 2021-1-4 08:48
527104427 发表于 2021-1-3 23:48
先试试看:

晚点回去试试看,谢谢!
作者: liuzhaoyzz    时间: 2021-1-4 12:16
527104427 发表于 2021-1-3 23:48
先试试看:

5大,刚才试了,结果都是空值,获取失败。从ESP分区的bootmgfw.efi启动的,UEFI启动vhd,结果都是空值。
作者: liuzhaoyzz    时间: 2021-1-4 18:08
527104427 发表于 2021-1-4 17:10
方便的话看下errorlevel是啥。看来得搭建相同环境才有可能搞清楚了。怀疑是磁盘权限问题导致读取失败。


echo %errorlevel%
2
结果是2。估计只有搭建相同环境才行

16097549510040.5887703704910384.jpg (34.55 KB, 下载次数: 154)

16097549510040.5887703704910384.jpg

作者: liuzhaoyzz    时间: 2021-1-4 20:41
527104427 发表于 2021-1-4 18:40
你输错命令了,2呢,一般是参数错了。
况且要在批处理中才能查errorlevel吧,手输也能查吗?

@echo off
ChkMbrPbr_x86 -ChkBootPart
echo %errorlevel%
pause

结果是9,没有找到启动分区。



作者: nttwqz    时间: 2021-1-5 22:47
试试这个

checkbootpart.7z

14.53 KB, 下载次数: 17, 下载积分: 无忧币 -2


作者: liuzhaoyzz    时间: 2021-1-6 08:22
527104427 发表于 2021-1-5 20:35
步骤1:磁盘1,ESP+MSR+DATA,UEFI启动安装此系统 cn_windows_10_business_editions_version_20h2_update ...

        5大,搭建vhd环境,不是必须要用我的这个vhd啊,GPT硬盘,随便用winntsetup创建vhd,并且把某个iso/esd镜像灌入其中即可。就可以测试了啊。用我这个vhd和你的vhd,环境测试结果应该是一样的啊。

5大辛苦了,再看看还有没有其他办法吧。

作者: liuzhaoyzz    时间: 2021-1-6 08:24
nttwqz 发表于 2021-1-5 22:47
试试这个

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


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

QQ拼音截图20210106081839.png

作者: 窄口牛    时间: 2021-1-6 08:36
不要想纯自动,太危险了,Linux和win混合双系统的更复杂。
作者: nttwqz    时间: 2021-1-6 09:43
liuzhaoyzz 发表于 2021-1-6 08:24
我试了,这个从FAT32分区上面UEFI启动的,加了*号的是C盘,结果好像不对。感觉从bcdedit这条路走不通。
...

分别选中1 3 5 7,将生成的四个文本文件传上来看看
作者: liuzhaoyzz    时间: 2021-1-6 09:44
窄口牛 发表于 2021-1-6 08:36
不要想纯自动,太危险了,Linux和win混合双系统的更复杂。

周星驰:“人如果没有梦想,跟咸鱼有什么区别”?
作者: liuzhaoyzz    时间: 2021-1-6 09:50
nttwqz 发表于 2021-1-6 09:43
分别选中1 3 5 7,将生成的四个文本文件传上来看看

怎么选中1 3 5 7?按任意键就直接退出了啊。
作者: nttwqz    时间: 2021-1-6 10:05
liuzhaoyzz 发表于 2021-1-6 09:50
怎么选中1 3 5 7?按任意键就直接退出了啊。

忘了,dpinfo输入
作者: liuzhaoyzz    时间: 2021-1-6 10:31
dpinfo也不行啊。显示不出来。去你的帖子刚才下载的最新版的dpinfo

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

QQ拼音截图20210106103056.png

作者: liuzhaoyzz    时间: 2021-1-6 10:54
本帖最后由 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


作者: nttwqz    时间: 2021-1-6 13:09
liuzhaoyzz 发表于 2021-1-6 10:31
dpinfo也不行啊。显示不出来。去你的帖子刚才下载的最新版的dpinfo

是不是diskpart被精简掉了
作者: nttwqz    时间: 2021-1-6 13:19
liuzhaoyzz 发表于 2021-1-6 10:54
哦,在WIN10-ramos里面,能够运行dpinfo。我把信息传上来。

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

看了一下,脚本本身的判断并没有出错,方法有点问题,原方法就是找出启动磁盘为是的磁盘,mbr的活动分区就必定是了,这个单硬盘有效,多硬盘没有测试。不太明白这个启动磁盘具体含义,原以为是代表引导文件所在磁盘,目前看来可能是指启动的系统所在磁盘,若如此只能分析bcd了。
作者: nttwqz    时间: 2021-1-6 13:20
本帖最后由 nttwqz 于 2021-1-6 13:29 编辑

BCD分析的原理是:
先将所有激活或ESP分区分配个盘符,然后bcdedit新建一个临时项,遍历这个项目BCD所在分区,即为引导分区。最后删除这个新建的项。
不知道分配盘符后,是否所有的bcdedit都能成功写入,如果不能,又是多硬盘,多引导分区并存时,则无法判断。
只要一个硬盘或多个硬盘中只有一个引导分区中有引导文件都好判断。
至于通过多个BCD判断哪个是当前系统的,没有好的思路。
作者: liuzhaoyzz    时间: 2021-1-6 14:27
nttwqz 发表于 2021-1-6 13:20
BCD分析的原理是:
先将所有激活或ESP分区分配个盘符,然后bcdedit新建一个临时项,遍历这个项目BCD所在分 ...

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

我上面的磁盘列表都是MBR硬盘,还没有涉及到GPT硬盘。
作者: nttwqz    时间: 2021-1-6 17:57
liuzhaoyzz 发表于 2021-1-6 14:27
就怕有的电脑bcdedit都运行不了。如果能用windows API之类的搞定就好了。

我上面的磁盘列表都是MBR硬 ...

缺胳膊少腿的系统不在我的考虑范围内,你可以自己补全相关文件。

API只能等其它高手了,条件是他们愿意动手。
作者: CodeHz    时间: 2021-1-6 18:54
通过逆向 bcdedit 我找到了如下几个可能相关的,但是没文档的 api :
NtEnumerateBootEntries
NtQueryBootOptions
NtQueryBootEntryOrder
我先看看其他人怎么用的,不行的话看看内核怎么实现的(
作者: plusv    时间: 2021-1-6 19:18
本帖最后由 plusv 于 2021-1-6 19:20 编辑
CodeHz 发表于 2021-1-6 18:54
通过逆向 bcdedit 我找到了如下几个可能相关的,但是没文档的 api :
NtEnumerateBootEntries
NtQueryBoo ...


NtEnumerateBootEntries(
  OUT PVOID Buffer,
  IN OUT PULONG BufferLength
  );

Routine Description:

    This function returns a list of all existing boot entries.

    N.B. This service requires the system environment privilege.

Arguments:

    Buffer - Supplies the address of the buffer that is to receive the
        returned data. The returned data is a sequence of BOOT_ENTRY_LIST
        structures.

    BufferLength - On input, supplies the length in bytes of the buffer.
        On output, returns the length in bytes of the returned data.
        If the input buffer is large enough, then BufferLength indicates
        the amount of data copied into Buffer. If the input buffer
        is too small, then BufferLength indicates the required buffer length.

Return Value:

    STATUS_SUCCESS              The function succeeded.
    STATUS_BUFFER_TOO_SMALL     The input buffer was too small.
    STATUS_INVALID_PARAMETER    One of the parameters is invalid.
    STATUS_NOT_IMPLEMENTED      This function is not supported on this platform.
    STATUS_UNSUCCESSFUL         The firmware returned an unrecognized error.
    STATUS_PRIVILEGE_NOT_HELD   The caller does not have the required privilege.
    STATUS_ACCESS_VIOLATION     One of the input parameters cannot be read,
                                or one of the output parameters cannot be written.

==================================================================================
NtQueryBootOptions(
  OUT PBOOT_OPTIONS BootOptions,
  IN OUT PULONG BootOptionsLength
  );

Routine Description:

    This function returns the system's global boot options.

    N.B. This service requires the system environment privilege.

Arguments:

    BootOptions - Supplies the address of the buffer that is to receive the
        returned data.

    BootOptionsLength - On input, supplies the length in bytes of the buffer.
        On output, returns the length in bytes of the returned data.
        If the input buffer is large enough, then BootOptionsLength indicates
        the amount of data copied into BootOptions. If the input buffer
        is too small, then BootOptionsLength indicates the required buffer
        length.

Return Value:

    STATUS_SUCCESS              The function succeeded.
    STATUS_BUFFER_TOO_SMALL     The input buffer was too small.
    STATUS_INVALID_PARAMETER    One of the parameters is invalid.
    STATUS_NOT_IMPLEMENTED      This function is not supported on this platform.
    STATUS_UNSUCCESSFUL         The firmware returned an unrecognized error.
    STATUS_PRIVILEGE_NOT_HELD   The caller does not have the required privilege.
    STATUS_ACCESS_VIOLATION     One of the input parameters cannot be read,
                                or one of the output parameters cannot be written.
==================================================================================
NtQueryBootEntryOrder(
  OUT PULONG Ids,
  IN OUT PULONG Count
  );

Routine Description:

    This function returns the system boot order list.

    N.B. This service requires the system environment privilege.

Arguments:

    Ids - Supplies the address of the buffer that is to receive the
        returned data. The returned data is an array of ULONG boot
        entry identifiers.

    Count - On input, supplies the length in ULONGs of the buffer.
        On output, returns the length in ULONGs of the returned data.
        If the input buffer is large enough, then Count indicates
        the amount of data copied into Buffer. If the input buffer
        is too small, then Count indicates the required buffer length.

Return Value:

    STATUS_SUCCESS              The function succeeded.
    STATUS_BUFFER_TOO_SMALL     The input buffer was too small.
    STATUS_INVALID_PARAMETER    One of the parameters is invalid.
    STATUS_NOT_IMPLEMENTED      This function is not supported on this platform.
    STATUS_UNSUCCESSFUL         The firmware returned an unrecognized error.
    STATUS_PRIVILEGE_NOT_HELD   The caller does not have the required privilege.
    STATUS_ACCESS_VIOLATION     One of the input parameters cannot be read,
                                or one of the output parameters cannot be written.


作者: plusv    时间: 2021-1-6 19:35
查了 Google
可能有用的 API

NtAddBootEntry
NtDeleteBootEntry
NtModifyBootEntry
NtEnumerateBootEntries

NtQueryBootEntryOrder
NtQueryBootOptions

NtSetBootEntryOrder
NtSetBootOptions

作者: CodeHz    时间: 2021-1-6 19:49
plusv 发表于 2021-1-6 19:35
查了 Google
可能有用的 API

头文件和相关结构体定义也在process hacker的源码里找到了(
作者: nttwqz    时间: 2021-1-6 20:31
此版完全放弃了启动磁盘+活动+ESP分区+分析BCD的方法,改为全部使用分析BCD的方法。

同上一版一样,我的电脑判断正常。

checkbootpart_v2.zip

16.51 KB, 下载次数: 18, 下载积分: 无忧币 -2


作者: CodeHz    时间: 2021-1-6 20:35

一顿研究后发现,bcdedit 确定启动磁盘似乎就是读取这个符号链接。。。
直接列出目录然后看符号链接指向的磁盘就好了

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

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

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



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

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


作者: liuzhaoyzz    时间: 2021-1-7 07:47
本帖最后由 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那个分区

作者: liuzhaoyzz    时间: 2021-1-7 08:41
527104427 发表于 2021-1-7 08:16
麻烦看下HKLM\SYSTEM\ControlSet001\Control\\FirmwareBootDevice的值是什么

        那台电脑在家里。我截图之后出来了,晚点看看。
作者: nttwqz    时间: 2021-1-7 09:35
liuzhaoyzz 发表于 2021-1-7 07:45
试了下,这个版本结果是对的。我的环境是ESP分区启动一个vhd。带星号的就是ESP分区。



我也发现了问题,该分配的没有分配,该删除的没有删除。
作者: liuzhaoyzz    时间: 2021-1-7 09:54
nttwqz 发表于 2021-1-7 09:35
我也发现了问题,该分配的没有分配,该删除的没有删除。

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

作者: nttwqz    时间: 2021-1-7 10:19
本帖最后由 nttwqz 于 2021-1-7 10:20 编辑
liuzhaoyzz 发表于 2021-1-7 09:54
有时候感觉checkbootpart执行起来很慢,大概有1-2分钟之久,不清楚原因。


获取磁盘信息需要执行两次diskpart,分配和删除盘符又需要两次,多硬盘系统所在磁盘一般不休眠,但是其它硬盘会休眠,休眠需要唤醒,唤醒需要时间,初次diskpart初始化也需要时间,分析本身是很快的,这就是我当初说慢的原因,diskpart本身运行慢和硬盘唤醒慢没办法解决,你不介意的话我可以用mountvol来替代didkpart删除盘符,遮阳可以减少一次
作者: liuzhaoyzz    时间: 2021-1-7 10:27
nttwqz 发表于 2021-1-7 10:19
获取磁盘信息需要执行两次diskpart,分配和删除盘符又需要两次,多硬盘系统所在磁盘一般不休眠,但是其 ...

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

作者: liuzhaoyzz    时间: 2021-1-7 10:33
CodeHz 发表于 2021-1-6 20:35
一顿研究后发现,bcdedit 确定启动磁盘似乎就是读取这个符号链接。。。
直接列出目录然后看符号链接指向 ...

静候佳音!
@CodeHz @plusv大神

作者: nttwqz    时间: 2021-1-7 10:39
本帖最后由 nttwqz 于 2021-1-7 10:41 编辑
liuzhaoyzz 发表于 2021-1-7 09:54
有时候感觉checkbootpart执行起来很慢,大概有1-2分钟之久,不清楚原因。


dpinfo有调试功能,将开头的改为set debug=on
这样会显示各步执行时间,看那一段时间长,在前面加句 cls & echo on,这样应该可以判断慢的原因,或者将开头回显打开以判断整个脚本慢的原因。
作者: liuzhaoyzz    时间: 2021-1-7 10:49
本帖最后由 liuzhaoyzz 于 2021-1-7 10:58 编辑
nttwqz 发表于 2021-1-7 10:39
dpinfo有调试功能,将开头的改为set debug=on
这样会显示各步执行时间,看那一段时间长,在前面加句 c ...

dpinfo在WIN10电脑用时1.7秒。
但是上面的checkbootpartV2有时候慢。看了下用时8秒。
作者: nttwqz    时间: 2021-1-7 10:53
liuzhaoyzz 发表于 2021-1-7 10:27
我搞不清楚为啥有的电脑执行起来比较快,大概10秒钟左右(没有秒表测试),有的居然要1-2分钟。似乎不是d ...

暂不考虑支持英文版,感觉中文版都没几个人用
作者: nttwqz    时间: 2021-1-7 11:03
liuzhaoyzz 发表于 2021-1-7 10:49
dpinfo在WIN10电脑用时1.7秒。
但是上面的checkbootpartV2有时候慢。看了下用时8秒。

那你在:sel后面加一句cls & echo on并删除后来所有的cls,然后看看那地方慢
作者: liuzhaoyzz    时间: 2021-1-7 11:13
nttwqz 发表于 2021-1-7 11:03
那你在:sel后面加一句cls & echo on并删除后来所有的cls,然后看看那地方慢

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

命令记录.rar

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


作者: nttwqz    时间: 2021-1-7 11:47
liuzhaoyzz 发表于 2021-1-7 11:13
我瞎改了一通,你看看记录。

我的本意是改了之后看哪里卡的时间长。。。
作者: CodeHz    时间: 2021-1-7 12:12
liuzhaoyzz 发表于 2021-1-7 10:33
静候佳音!
@CodeHz @plusv大神

你先试试用winobj (sys internals 套件里的那个) 管理员权限打开后能不能在我截图的位置看到正确的结果,可以的话我就做个小工具读(并在已经挂载的情况下拿到盘符)
作者: liuzhaoyzz    时间: 2021-1-7 12:22
本帖最后由 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)



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

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

winobj截图.jpg

作者: CodeHz    时间: 2021-1-7 13:17
liuzhaoyzz 发表于 2021-1-7 12:43
不知道是哪个,盘符怎么对应的

又深入研究了一下这几个路径,发现它实际上是系统盘所在路径,而非引导分区。。。
作者: CodeHz    时间: 2021-1-7 13:33
继续研究了一下,似乎就是\Device\SystemPartition这个路径对应引导分区,至少在我这里是这样的。。。(关于如何定位分区,你可以可以这样手动找

作者: plusv    时间: 2021-1-7 13:44
CodeHz 发表于 2021-1-7 13:33
继续研究了一下,似乎就是\Device\SystemPartition这个路径对应引导分区,至少在我这里是这样的。。。(关 ...

Windows 7 X64 完整版,
没有这些符号链接.


作者: CodeHz    时间: 2021-1-7 13:46
plusv 发表于 2021-1-7 13:44
Windows 7 X64 完整版,
没有这些符号链接.

在GLOBAL??下找找看有没有对应的(直接按符号链接排序,找找有没有对应引导分区且有显著标志的
作者: plusv    时间: 2021-1-7 13:47
WuYou 从昨晚到现在都很卡,
网速只有 0.000-0.030 Mbps,
传个 78 KB 小图都很久,
快晕了.

作者: CodeHz    时间: 2021-1-7 13:48
plusv 发表于 2021-1-7 13:47
WuYou 从昨晚到现在都很卡,
网速只有 0.000-0.030 Mbps,
传个 78 KB 小图都很久,

我这每次发东西都得刷新才能发出来(也不知道哪里的问题)
作者: plusv    时间: 2021-1-7 13:50
CodeHz 发表于 2021-1-7 13:46
在GLOBAL??下找找看有没有对应的(直接按符号链接排序,找找有没有对应引导分区且有显著标志的

也是没有.

WuYou 从昨晚到现在都很卡,
网速只有 0.000-0.030 Mbps,
不传图了

作者: CodeHz    时间: 2021-1-7 13:51
我这边GLOBAL??里磁盘相关的有这些项目

作者: plusv    时间: 2021-1-7 14:00
CodeHz 发表于 2021-1-7 13:51
我这边GLOBAL??里磁盘相关的有这些项目

也是没有.







欢迎光临 无忧启动论坛 (http://bbs.c3.wuyou.net/) Powered by Discuz! X3.3