无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
查看: 5586|回复: 11

检测 bcd 菜单的项目 正确性的 脚本草稿

[复制链接]
发表于 2018-3-17 19:49:55 | 显示全部楼层 |阅读模式
本帖最后由 dos时代菜鸟 于 2018-3-18 22:22 编辑

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

bcd_check.0.3.zip (9.73 KB, 下载次数: 94)
 楼主| 发表于 2018-3-17 19:59:46 | 显示全部楼层
本帖最后由 dos时代菜鸟 于 2018-3-17 20:08 编辑

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

对于 vhd=[locate] 的可能会判断错误

点评

vhd=[locate] ----------------- [locate]的情况,应该是搜索vhd文件,搜索和bcd在同磁盘的vhd文件。 如果bcd是磁盘0的,那么遍历磁盘0的分区,例如有这个 H:\vhd\test.vhd(x) 文件,那么就ok 另外检测脚本  详情 回复 发表于 2018-3-17 20:29
回复

使用道具 举报

发表于 2018-3-17 20:29:52 | 显示全部楼层
dos时代菜鸟 发表于 2018-3-17 19:59
因为 检测 内容有限,如果这些有限的条件 都不满足而 界定为 Error ,那么,这条 选项 可以删掉了。

对于 ...

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

另外检测脚本没有卸载装载过的隐藏分区

点评

刚改进了一下 的 locate 的,还要再想一想。  详情 回复 发表于 2018-3-17 21:06
回复

使用道具 举报

 楼主| 发表于 2018-3-17 21:06:52 | 显示全部楼层
本帖最后由 dos时代菜鸟 于 2018-3-17 21:10 编辑
freesoft00 发表于 2018-3-17 20:29
vhd=[locate]
-----------------
[locate]的情况,应该是搜索vhd文件,搜索和bcd在同磁盘的vhd文件。


刚改进了一下 [boot] 的
locate 的,还要再想一想。要用到  那个 卷分区列表了。
回复

使用道具 举报

发表于 2018-3-17 21:59:30 | 显示全部楼层
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文件了。
回复

使用道具 举报

发表于 2018-3-17 22:44:12 | 显示全部楼层
本帖最后由 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"
回复

使用道具 举报

发表于 2018-3-17 23:20:43 | 显示全部楼层
本帖最后由 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文件位置的方案就否决了吧。

回复

使用道具 举报

 楼主| 发表于 2018-3-17 23:52:01 | 显示全部楼层
本帖最后由 dos时代菜鸟 于 2018-3-17 23:58 编辑

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

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

评分

参与人数 1无忧币 +5 收起 理由
freesoft00 + 5 好吧

查看全部评分

回复

使用道具 举报

发表于 2018-3-18 00:10:58 | 显示全部楼层
bcd检测在我这里都ok了。
我是bios环境。
回复

使用道具 举报

发表于 2018-3-18 00:17:24 | 显示全部楼层
      )
  )
  exit /b  
  :win_x
这里是不是多了一个括号?
回复

使用道具 举报

 楼主| 发表于 2018-3-18 22:23:20 | 显示全部楼层
本帖最后由 dos时代菜鸟 于 2018-3-18 22:41 编辑

以修正  那个 括号 的问题。
不是 那个地方的 括号,而是上面 uefi 判断的时候 多了个 括号。呵呵,
回复

使用道具 举报

发表于 2022-10-23 20:28:12 | 显示全部楼层
要是能列出重复项,供用户指定删除就好了,因为有时候重装系统会出现两个菜单项指向同一个分区。
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-3-28 23:58

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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