无忧启动论坛

标题: 检测 bcd 菜单的项目 正确性的 脚本草稿 [打印本页]

作者: dos时代菜鸟    时间: 2018-3-17 19:49
标题: 检测 bcd 菜单的项目 正确性的 脚本草稿
本帖最后由 dos时代菜鸟 于 2018-3-18 22:22 编辑

能测试的地方 有限
大家测试吧
比如 partition 有效性,efi扩展名有效性,文件存在有效性 的检测,而且是部分的,有的还不能,比如 vhd 的,path \windows\system32\winload.exe 之类的,就需要事先把vhd挂载了。其他的 还不能。

bcd_check.0.3.zip (9.73 KB, 下载次数: 110)





作者: dos时代菜鸟    时间: 2018-3-17 19:59
本帖最后由 dos时代菜鸟 于 2018-3-17 20:08 编辑

因为 检测 内容有限,如果这些有限的条件 都不满足而 界定为 Error ,那么,这条 选项 可以删掉了。

对于 vhd=[locate] 的可能会判断错误
作者: freesoft00    时间: 2018-3-17 20:29
dos时代菜鸟 发表于 2018-3-17 19:59
因为 检测 内容有限,如果这些有限的条件 都不满足而 界定为 Error ,那么,这条 选项 可以删掉了。

对于 ...

vhd=[locate]
-----------------
[locate]的情况,应该是搜索vhd文件,搜索和bcd在同磁盘的vhd文件。
如果bcd是磁盘0的,那么遍历磁盘0的分区,例如有这个
H:\vhd\test.vhd(x)
文件,那么就ok

另外检测脚本没有卸载装载过的隐藏分区
作者: dos时代菜鸟    时间: 2018-3-17 21:06
本帖最后由 dos时代菜鸟 于 2018-3-17 21:10 编辑
freesoft00 发表于 2018-3-17 20:29
vhd=[locate]
-----------------
[locate]的情况,应该是搜索vhd文件,搜索和bcd在同磁盘的vhd文件。


刚改进了一下 [boot] 的
locate 的,还要再想一想。要用到  那个 卷分区列表了。
作者: freesoft00    时间: 2018-3-17 21:59
win10,注册表ProductName显示名称是Windows 10 Enterprise G
没有BuildLabEx键。
批处理检测显示的是WINDOWS W32i-10.0

如果不想使用检测是否存在C:\Windows\SysWOW64\cmd.exe文件来判读是否是32位还是64位系统。可以检测下面的注册表键值:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion]
"CommonFilesDir"="C:\\Program Files\\Common Files"
"CommonFilesDir (x86)"="C:\\Program Files (x86)\\Common Files"
"CommonW6432Dir"="C:\\Program Files\\Common Files"
"ProgramFilesDir"="C:\\Program Files"
"ProgramFilesDir (x86)"="C:\\Program Files (x86)"
"ProgramW6432Dir"="C:\\Program Files"
加粗的几个是64位特有的,没有就是32位系统。
这样就不需要filever文件了。
作者: freesoft00    时间: 2018-3-17 22:44
本帖最后由 freesoft00 于 2018-3-17 23:05 编辑

BCD文件位置:
在注册表路径[HKEY_LOCAL_MACHINE\BCD00000000]
如果有这个注册表项,说明系统已经挂在了bcd文件。bcd文件的路径在下面的注册表键值可以得到
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\hivelist]
"\\REGISTRY\\MACHINE\\BCD00000000"="\\Device\\HarddiskVolume1\\Boot\\BCD"

如果运行环境是winpe,可以让用户手动输入bcd位置,这样需要批处理做一个运行环境判断。如果不是winpe,并且在注册表中可以找到bcd位置就不需要用户输入了。


另外,我测试使用过你的检测脚本后[HKEY_LOCAL_MACHINE\BCD00000000]这个bcd挂载会消失。
测试环境是实体系统+vhd系统,使用注册表手动挂载了vhd系统中的software注册表文件,然后再运行你的检测脚本,检测完成bcd后,发现bcd挂载点被卸载掉了。

有下面的键值一般就是winpe启动:
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control]
"SystemStartOptions"="MININT"
作者: freesoft00    时间: 2018-3-17 23:20
本帖最后由 freesoft00 于 2018-3-17 23:51 编辑

又看了一下,检测这里也不好判断,例如有隐藏分区的情况
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\hivelist]
"\\REGISTRY\\MACHINE\\BCD00000000"="\\Device\\HarddiskVolume1\\Boot\\BCD"
我的系统是vhd系统,vhd文件存放在f盘,分区最前面是百兆的隐藏分区,里面是系统启动文件,bcd就在其中。vhd系统启动后显示盘符为c
看注册表显示的是
\\Device\\HarddiskVolume1\\Boot\\BCD
实体磁盘系统的话就一般对应C盘,但是这个是虚拟磁盘,真实的引导文件是前面的百兆隐藏文件中的bcd。
所以自动检测bcd文件位置的方案就否决了吧。


作者: dos时代菜鸟    时间: 2018-3-17 23:52
本帖最后由 dos时代菜鸟 于 2018-3-17 23:58 编辑

更新了 0.3 支持 locate
bcd 位置还是用户自己输入吧
这样的东西,还是 不要太自动,不然 你的 专业知识 怎么显现? 包括 win 版本 的显示,我是不打算纠结在这上面了。

目前我能做到的对  bcd 内容的 检测 ,差不多 就样子了,过段时间,在研究,或许有所提升。
先这样吧。慢慢来。

作者: freesoft00    时间: 2018-3-18 00:10
bcd检测在我这里都ok了。
我是bios环境。
作者: freesoft00    时间: 2018-3-18 00:17
      )
  )
  exit /b  
  :win_x
这里是不是多了一个括号?
作者: dos时代菜鸟    时间: 2018-3-18 22:23
本帖最后由 dos时代菜鸟 于 2018-3-18 22:41 编辑

以修正  那个 括号 的问题。
不是 那个地方的 括号,而是上面 uefi 判断的时候 多了个 括号。呵呵,
作者: Anson4    时间: 2022-10-23 20:28
要是能列出重复项,供用户指定删除就好了,因为有时候重装系统会出现两个菜单项指向同一个分区。
作者: namsoo    时间: 2024-6-13 06:41

厉害 支持
作者: 财源茂盛    时间: 2024-6-13 08:22
提示: 作者被禁止或删除 内容自动屏蔽
作者: 财源茂盛    时间: 2024-6-20 21:29
提示: 作者被禁止或删除 内容自动屏蔽




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