无忧启动论坛

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

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

    [复制链接]
181#
 楼主| 发表于 2021-1-9 21:58:49 | 只看该作者
detectfirmware-i386 2>nul 这个( 用 for in 就能提取了
如果提取不到呢?批处理再找空盘,然后再调用mountfirmware-i386.exe Z:?
就不能简单点吗?找空盘、调用mountfirmware-i386.exe Z:都可以放在程序内部一起搞定即可。
我只是要个盘符啊!就只要一个字母而已,难道就这么难吗?

回复

使用道具 举报

182#
 楼主| 发表于 2021-1-9 22:07:59 | 只看该作者
CodeHz 发表于 2021-1-9 21:54
我记得64位还是要保留一下的,因为有的pe只有64位,没有WoW支持,这样32位的直接就运行不了了(
所以最起 ...

        32位64位如果都有最好了。一般情况下,还是32位的通用性更好。
回复

使用道具 举报

183#
发表于 2021-1-9 23:21:31 | 只看该作者
本帖最后由 CodeHz 于 2021-1-9 23:24 编辑

smart.zip (9.26 KB, 下载次数: 18)
那么大概就是这个了,有问题明天修(
附上32位/64位兼容batch(主要提供给仅64位支持的pe用)
  1. @echo off
  2. setlocal enableextensions enabledelayedexpansion
  3. 2>nul call :set_arch_%PROCESSOR_ARCHITECTURE%
  4. if errorlevel 1 (goto :unsupported_arch) else (goto :start)
  5. exit /b
  6. :set_arch_AMD64
  7. set ARCH=x86_64
  8. exit /b
  9. :set_arch_x86
  10. set ARCH=i386
  11. exit /b
  12. :unsupported_arch
  13. echo Unsupported architecture: %PROCESSOR_ARCHITECTURE%
  14. exit /b
  15. :start
  16. smartmountfirmware-%ARCH% %*
  17. endlocal
复制代码

用法:smartmountfirmware mount即可获得一个盘符smartmountfirmware unmount即可取消挂载
smartmountfirmware dump用于调试目的

不想要调试输出可以用 2<nul smartmountfirmware mount 的方式去掉
也可以在批处理里拿到输出
for /f usebackq %%i in (`2^<nul smartmountfirmware mount`) do set DRIVE=%%i
回复

使用道具 举报

184#
 楼主| 发表于 2021-1-10 10:01:56 | 只看该作者
本帖最后由 liuzhaoyzz 于 2021-1-10 15:25 编辑
CodeHz 发表于 2021-1-9 23:21
那么大概就是这个了,有问题明天修(
附上32位/64位兼容batch(主要提供给仅64位支持的pe用)

感谢大神,大神辛苦了!
早上起来测试了几个环境,应该没问题,晚点详细测试下,现在有事要出去。
您的批处理判断操作系统位数有问题,某些环境下会出错。

smart.rar

570 Bytes, 下载次数: 14, 下载积分: 无忧币 -2

回复

使用道具 举报

185#
 楼主| 发表于 2021-1-10 14:03:42 | 只看该作者
本帖最后由 liuzhaoyzz 于 2021-1-11 09:37 编辑

smartmountfirmware测试结果
一、UEFI下从MBR-激活FAT32启动:没有重复盘符现象,卸载启动分区盘符正常。
1、WIN10.VHD,启动分区有盘符,OK!√
2、WIN10.VHD,启动分区无盘符,自动分配了盘符,OK!√
3、WIN8.1.VHD,启动分区有盘符,OK!√
4、WIN8.1.VHD,启动分区无盘符,自动分配了盘符,OK!√
5、WIN7.VHD,启动分区有盘符,OK!√
6、WIN7.VHD,启动分区无盘符,自动分配了盘符,OK!√
7、bootmgfw.efi→WIN10PE.WIM,启动分区有盘符,OK!√
7、bootmgfw.efi→WIN10PE.WIM,启动分区无盘符,自动分配了盘符,OK!√
8、grub2x64.efi→WIN10PE.ISO,结果是空值,这是正确的结果!OK!√


二、UEFI下从GPT硬盘ESP启动:没有重复盘符现象,卸载启动分区盘符正常。ESP分区读写正常(我是在内置超级管理员用户下测试的)。
1、WIN10.VHD,启动分区提前用bootice或者guyue2011的findESP程序分配盘符,smartmountfirmware准确找到,并且能够精准卸载,OK!√
2、WIN10.VHD,启动分区无盘符,自动分配了盘符,OK!√
3、WIN8.1.VHD,启动分区提前用bootice或者guyue2011的findESP程序分配盘符,smartmountfirmware准确找到,并且能够精准卸载,OK!√
4、WIN8.1.VHD,启动分区无盘符,自动分配了盘符,OK!√
5、WIN7.VHD,启动分区提前用bootice或者guyue2011的findESP程序分配盘符,smartmountfirmware准确找到,并且能够精准卸载,OK!√
6、WIN7.VHD,启动分区无盘符,自动分配了盘符,OK!√
7、bootmgfw.efi→WIN10PE.WIM,启动分区提前用bootice或者guyue2011的findESP程序分配盘符,smartmountfirmware准确找到,并且能够精准卸载,OK!√
7、bootmgfw.efi→WIN10PE.WIM,启动分区无盘符,自动分配了盘符,OK!√
8、grub2x64.efi→WIN10PE.ISO,结果是空值,这是正确的结果!OK!√

三、BIOS下从MBR-激活FAT32启动:
1、WIN10.VHD,启动分区有盘符,OK!√
2、WIN10.VHD,启动分区无盘符,自动分配了盘符,OK!√
3、WIN8.1.VHD,启动分区有盘符,OK!√
4、WIN8.1.VHD,启动分区无盘符,自动分配了盘符,OK!√
5、WIN7.VHD,启动分区有盘符,OK!√
6、WIN7.VHD,启动分区无盘符,自动分配了盘符,OK!√
7、bootmgr→WIN10PE.WIM,启动分区有盘符,OK!√
7、bootmgr→WIN10PE.WIM,启动分区无盘符,自动分配了盘符,OK!√
8、bootmgr→grldr中转→WIN10PE.ISO,结果是空值,这是正确的结果!OK!√
9、ntldr→32位的xp系统,结果是空值,弹出错误,“无法定位程序输入点RegCloseKey于动态链接库kerne132.dl1上”,卸载盘符也出错。看样子不支持XP???


360安全卫士扫描:通过扫描,没有被杀!但是突然报了个病毒。(大家都知道没有病毒,我只是看程序能否在360的恶劣环境中生存!78楼我已向360流氓卫士发起误报反馈!360软件开放平台误报反馈 https://open.soft.360.cn/report.php



衷心感谢大神CodeHz!



回复

使用道具 举报

186#
发表于 2021-1-10 14:13:55 | 只看该作者
liuzhaoyzz 发表于 2021-1-10 14:03
smartmountfirmware测试结果
一、UEFI下从MBR-激活FAT32启动:没有重复盘符现象,卸载启动分区盘符正常。
...

xp的dll发来给我研究一下,有如下几个
kernel32.dll
kernelbase.dll
user32.dll
advapi32.dll
回复

使用道具 举报

187#
 楼主| 发表于 2021-1-10 14:24:37 | 只看该作者
本帖最后由 liuzhaoyzz 于 2021-1-13 07:28 编辑
CodeHz 发表于 2021-1-10 14:13
xp的dll发来给我研究一下,有如下几个
kernel32.dll
kernelbase.dll

大神,感觉应该是编译模式选项的问题吧?VC2015下面,编译模式选择支持xp就可以了。项目菜单->项目属性->配置属性->常规->平台工具集,选择“Visual Studio 2015 - Windows XP (v140_xp)”。
你说的几个dll我上传上来,kernelbase.dll-xp下面没有。

xp的几个dll.rar

2.07 MB, 下载次数: 2, 下载积分: 无忧币 -2

回复

使用道具 举报

188#
发表于 2021-1-10 14:28:10 | 只看该作者
liuzhaoyzz 发表于 2021-1-10 14:24
大神,感觉应该是编译模式选项的问题吧?VC2015下面,编译模式选择支持xp就可以了。
你说的几个dll我上 ...

准确说,是我发现它符号选择到了kernel32上去了,应该链接到advapi32的就能支持xp了。。。
回复

使用道具 举报

189#
发表于 2021-1-10 14:45:22 | 只看该作者
smartmountfirmware-i386.exe (8.67 KB, 下载次数: 7)
理论上兼容xp(就解决那一个弹框,其他的弹框就无能为力了)的版本,能用正常的版本就别用这个(
回复

使用道具 举报

190#
 楼主| 发表于 2021-1-10 15:17:54 | 只看该作者
本帖最后由 liuzhaoyzz 于 2021-1-10 15:19 编辑
CodeHz 发表于 2021-1-10 14:45
理论上兼容xp(就解决那一个弹框,其他的弹框就无能为力了)的版本,能用正常的版本就别用这个(

还是不行啊,大神。我感觉用VC做静态编译,肯定能够兼容XP。

Windows XP Professional-2021-01-10-15-17-17.png (25.98 KB, 下载次数: 262)

Windows XP Professional-2021-01-10-15-17-17.png
回复

使用道具 举报

191#
发表于 2021-1-10 15:26:56 | 只看该作者
liuzhaoyzz 发表于 2021-1-10 15:17
还是不行啊,大神。我感觉用VC做静态编译,肯定能够兼容XP。

smartmountfirmware-i386.exe (8.5 KB, 下载次数: 3)
这个版本应该可以了,我用tcc的功能重新生成了导入表,之前居然忘记了tcc有这个功能23333
用xp的dll生成导入表就可以生成兼容xp的版本了
(大概吧,也不是很确定,下个版本直接在tjs镜像里加入tcc好了
回复

使用道具 举报

192#
 楼主| 发表于 2021-1-10 15:31:01 | 只看该作者
CodeHz 发表于 2021-1-10 15:26
这个版本应该可以了,我用tcc的功能重新生成了导入表,之前居然忘记了tcc有这个功能23333
用xp的dll生 ...

结果显示不出来啊。好像出错了。

Windows XP Professional-2021-01-10-15-30-10.png (24.32 KB, 下载次数: 292)

Windows XP Professional-2021-01-10-15-30-10.png
回复

使用道具 举报

193#
发表于 2021-1-10 15:32:16 | 只看该作者
liuzhaoyzz 发表于 2021-1-10 15:31
结果显示不出来啊。好像出错了。

你去注册表看看有没有这个先。。我觉得怕是根本没有)顺便把xp内核也发个来看看
ntoskrnl.exe
回复

使用道具 举报

194#
发表于 2021-1-10 15:32:32 | 只看该作者
我是来泼冷水的,我认为多硬盘多种结构的环境来“自动”确认,是不太可靠的,
我个人对这种工具也是相当不屑的

点评

不需要泼冷水,只要微软的bootmgr/bootmgfw.efi启动的情况,我在楼上测试了,没问题。  详情 回复 发表于 2021-1-10 15:40
我这个不是基于文件结构来确定的,而是按照windows自己确定引导分区的方法反推注册表位置的方法来找的( 所以实际上我这个完全没有去检查硬盘的结构,插入一百个硬盘也没有关系( (那个解析路径实际上是在nt内核对  详情 回复 发表于 2021-1-10 15:37
回复

使用道具 举报

195#
发表于 2021-1-10 15:37:35 | 只看该作者
江南一根葱 发表于 2021-1-10 15:32
我是来泼冷水的,我认为多硬盘多种结构的环境来“自动”确认,是不太可靠的,
我个人对这种工具也是相当不 ...

我这个不是基于文件结构来确定的,而是按照windows自己确定引导分区的方法反推注册表位置的方法来找的(
所以实际上我这个完全没有去检查硬盘的结构,插入一百个硬盘也没有关系(
(那个解析路径实际上是在nt内核对象里做符号链接解析,不会涉及实际文件的关系
回复

使用道具 举报

196#
 楼主| 发表于 2021-1-10 15:39:13 | 只看该作者
CodeHz 发表于 2021-1-10 15:32
你去注册表看看有没有这个先。。我觉得怕是根本没有)顺便把xp内核也发个来看看
ntoskrnl.exe

你说的注册表是哪里?
ntoskrnl.dll我上传上来。

ntoskrnl.rar

1.01 MB, 下载次数: 1, 下载积分: 无忧币 -2

回复

使用道具 举报

197#
 楼主| 发表于 2021-1-10 15:40:12 | 只看该作者
本帖最后由 liuzhaoyzz 于 2021-1-10 15:41 编辑
江南一根葱 发表于 2021-1-10 15:32
我是来泼冷水的,我认为多硬盘多种结构的环境来“自动”确认,是不太可靠的,
我个人对这种工具也是相当不 ...

不需要泼冷水,只要微软的bootmgr/bootmgfw.efi启动的情况,我在167楼上测试了,没问题。大不了再让用户确认下罢了。
回复

使用道具 举报

198#
 楼主| 发表于 2021-1-10 15:43:52 | 只看该作者
本帖最后由 liuzhaoyzz 于 2021-1-10 15:51 编辑

HKLM\SYSTEM\CurrentControlSet\Control\FirmwareBootDevice
xp下面没有这个主键。我用"FirmwareBootDevice"作为关键字搜索了下,整个注册表都没有这个关键字。但我用“bootdevice”作为关键字,搜索到了这个:
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control]
"CurrentUser"="USERNAME"
"WaitToKillServiceTimeout"="5000"
"SystemStartOptions"="NOEXECUTE=OPTIN  FASTDETECT"
"SystemBootDevice"="multi(0)disk(0)rdisk(0)partition(1)"


"SystemBootDevice"="multi(0)disk(0)rdisk(0)partition(1)"这个好像是对的。

Windows XP Professional-2021-01-10-15-42-57.png (29.97 KB, 下载次数: 252)

Windows XP Professional-2021-01-10-15-42-57.png
回复

使用道具 举报

199#
发表于 2021-1-10 15:50:21 | 只看该作者
思考了一下,XP是不是启动分区和引导分区必须在同一个分区的啊(指正常引导的情况)
回复

使用道具 举报

200#
发表于 2021-1-10 15:51:49 | 只看该作者
liuzhaoyzz 发表于 2021-1-10 15:43
HKLM\SYSTEM\CurrentControlSet\Control\FirmwareBootDevice
xp下面没有这个主键。我用"FirmwareBootDevic ...

看下 MACHINE\SYSTEM\CurrentControlSet\Control  下有那些,我这里大概猜测SystemBootDevice既是系统盘也是引导盘)
回复

使用道具 举报

201#
 楼主| 发表于 2021-1-10 15:53:23 | 只看该作者
CodeHz 发表于 2021-1-10 15:50
思考了一下,XP是不是启动分区和引导分区必须在同一个分区的啊(指正常引导的情况)

不一定啊,很久以前xp原安装光盘好像就会创建个小的100MB的分区,并激活,把启动文件NTLDR ntdetect.com,boot.ini等等这些文件放在活动分区上面。
但我没有用过原版ISO安装,我都是用ghost版本安装,都是把那个启动用的激活小分区合并到C盘了。
我有事出去下。
回复

使用道具 举报

202#
 楼主| 发表于 2021-1-10 15:54:47 | 只看该作者
CodeHz 发表于 2021-1-10 15:51
看下 MACHINE\SYSTEM\CurrentControlSet\Control  下有那些,我这里大概猜测SystemBootDevice既是系统盘 ...

你看下。[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control]



CurrentControlSet.rar

53.18 KB, 下载次数: 5, 下载积分: 无忧币 -2

回复

使用道具 举报

203#
发表于 2021-1-10 16:01:33 | 只看该作者
smartmountfirmware-i386.exe (8.5 KB, 下载次数: 25)
改了下参数,现在会在FirmwareBootDevice找不到的情况下fallback到SystemBootDevice上,大概符合需求了(
回复

使用道具 举报

204#
 楼主| 发表于 2021-1-10 16:10:17 来自手机 | 只看该作者
CodeHz 发表于 2021-1-10 16:01
改了下参数,现在会在FirmwareBootDevice找不到的情况下fallback到SystemBootDevice上,大概符合需求了( ...

我有事出来了,手机回复,晚上回去看下,大神辛苦了,谢谢了!
回复

使用道具 举报

205#
 楼主| 发表于 2021-1-10 18:40:38 | 只看该作者
CodeHz 发表于 2021-1-10 16:01
改了下参数,现在会在FirmwareBootDevice找不到的情况下fallback到SystemBootDevice上,大概符合需求了( ...

在虚拟机里面的xp上面试了下,可以了!大神就是大神!

友情大神把全套源代码再分享下,我收藏起来。谢谢!

Windows XP Professional-2021-01-10-18-38-58.png (30.98 KB, 下载次数: 217)

Windows XP Professional-2021-01-10-18-38-58.png
回复

使用道具 举报

206#
发表于 2021-1-10 18:57:21 | 只看该作者
本帖最后由 CodeHz 于 2021-1-10 19:01 编辑

boot.zip (51.64 KB, 下载次数: 42)
(刚无忧崩了一下,不知道有没有上传成功)
附带一个简单的文档(

评分

参与人数 1无忧币 +10 收起 理由
liuzhaoyzz + 10 很给力!

查看全部评分

回复

使用道具 举报

207#
发表于 2021-1-10 19:01:45 | 只看该作者
liuzhaoyzz 发表于 2021-1-10 15:40
不需要泼冷水,只要微软的bootmgr/bootmgfw.efi启动的情况,我在167楼上测试了,没问题。大不了再让用户 ...

那有些机是oem激活,比如小马激活的情况,有些版本就不是直接bootmgr启动的
回复

使用道具 举报

208#
发表于 2021-1-10 19:02:41 | 只看该作者
如果是在特定的环境,那怎么判断都没问题,自己立个flag判断不就行了,
回复

使用道具 举报

209#
 楼主| 发表于 2021-1-10 19:03:50 | 只看该作者
CodeHz 发表于 2021-1-10 18:57
(刚无忧崩了一下,不知道有没有上传成功)
附带一个简单的文档(

可以下载。感谢大神分享!已收藏!
回复

使用道具 举报

210#
 楼主| 发表于 2021-1-10 19:05:53 | 只看该作者
江南一根葱 发表于 2021-1-10 19:01
那有些机是oem激活,比如小马激活的情况,有些版本就不是直接bootmgr启动的

一般情况下都是bootmgr/bootmgfw.efi为第一引导启动的。大不了加个提示罢了。足够用了。只能考虑大众的情况,其余情况不用考虑了。CodeHz大神的程序完美地解决了我的问题!
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2025-7-31 05:37

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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