无忧启动论坛

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

在 windows 下安装 grub4dos 引导代码

    [复制链接]
发表于 2022-4-4 15:50:22 | 显示全部楼层 |阅读模式
本帖最后由 2011yaya2007777 于 2022-4-26 11:37 编辑

看了 szwpWIN 下安装 UMBR”的帖子及作品,看了 星语风 的作品,都很好。
grub4dos 内部自带一个安装工具 bootlace.com,感觉有些不太方便。
现在凑热闹,发一个利用 winhex 安装的脚本。抛砖引玉,请懂批处理的大师看看,可否再干练一些。

2022_04_26
1. 前言
通常使用BOOTICE安装GRUB4DOS的引导代码。
由于作者Pauly遗失源码,无法更新嵌入程序内部的引导代码,所以不能同步更新GRUB4DOS。
写这个脚本,一是弥补上述遗憾,二是对WinHex脚本的学习与练手。

2. 脚本功能
在windows下安装GRUB4DOS的引导代码到磁盘或镜像文件。
磁盘或镜像文件的分区类型可以是MBR及GPT。
镜像文件的格式可以是img(ima)及静态vhd。
引导代码的类型可以是grldr.mbr,mbr及pbr(支持的文件系统类型是:FAT12/16/32,EXFAT,NTFS,EXT2/3/4)。
可以备份mbr及pbr。
可以使用备份的文件恢复mbr及pbr。

3. 使用方法
把压缩文件解压到C盘根目录,双击"主程序.cmd"。

4. 温馨提示
复制一个单文件版本的WinHex到本程序目录下,重命名为WinHex64.exe,可以提高运行速度。(注意选择适当版本,有的版本闪退。)
如果本程序目录下没有WinHex64.exe,则会提示输入WinHex64.exe的位置(如 d:\path\),也可以直接回车跳过。
如果跳过,则主程序会搜索电脑上存在的WinHex64.exe,可能需要很长时间,请耐心等待。

数据无价,请及时备份。
若有闪失,本人不予负责。



Install_g4d.rar

16.5 KB, 下载次数: 106, 下载积分: 无忧币 -2

评分

参与人数 3无忧币 +15 收起 理由
879792799 + 5 遗憾 如此宝贵源码遗失
蓝星明月 + 5 赞一个!
freesoft00 + 5

查看全部评分

发表于 2022-4-4 16:18:34 | 显示全部楼层
楼主都是大神了,难道还需要我等假大师?直接用C写一个命令行版本?

点评

肯定在装傻,忽悠我们小白  发表于 2022-10-4 19:17
肯定在装傻,忽悠我们小白...  详情 回复 发表于 2022-4-4 16:21
回复

使用道具 举报

发表于 2022-4-4 16:20:58 | 显示全部楼层
俺当时是因为群友有需要才做的,测试的不够多。谢谢提供。
回复

使用道具 举报

发表于 2022-4-4 16:21:26 | 显示全部楼层
nttwqz 发表于 2022-4-4 16:18
楼主都是大神了,难道还需要我等假大师?直接用C写一个命令行版本?

肯定在装傻,忽悠我们小白...
回复

使用道具 举报

发表于 2022-4-4 16:42:23 | 显示全部楼层
当时为了体积小,用过diskrw,结果有反映装错盘了
回复

使用道具 举报

发表于 2022-4-4 16:48:02 | 显示全部楼层
感谢大师分享
回复

使用道具 举报

发表于 2022-4-4 18:10:51 | 显示全部楼层
感觉winhex有点大,以后如果有人兴趣用c或者c++写一个就好了。

diskrw是个有一定风险的命令,边界条件很重要,搞错了有风险。

回复

使用道具 举报

发表于 2022-4-4 18:24:14 | 显示全部楼层
本帖最后由 wintoflash 于 2022-4-4 18:27 编辑

凑个热闹
前段时间写的 diskfire 小程序,支持安装 GRUB4DOS MBR/PBR,支持安装到 MBR/GPT 分区表。
由于主要功能都是移植自 GRUB2 的,所以采用 GRUB2 格式的磁盘名。
比如
  1. diskfire.exe mbr -i=GRUB4DOS (hd1)
  2. diskfire.exe pbr -i=GRUB4DOS (hd1,1)
复制代码

具体哪个磁盘对应什么磁盘名,可以使用 ls 来查看
  1. diskfire.exe ls
复制代码

还有其他功能,可以用 diskfire.exe help 进行查看。
此程序仅供测试,可能有很多 bug,如果出现数据丢失,本人不对此负责。
下载: https://github.com/a1ive/diskfire/releases
1.png
2.png

点评

diskfire.exe mbr -i=GRUB4DOS (hd1) 这个(hd1)能否用盘符代替之啊?比如说: diskfire.exe mbr -i=GRUB4DOS C:,这样子的命令,可以把C:盘所在的硬盘的MBR修改为g4d,用批处理还要判断很多。 grubinst直接直接  详情 回复 发表于 2022-4-4 20:42

评分

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

查看全部评分

回复

使用道具 举报

发表于 2022-4-4 18:32:01 | 显示全部楼层
谢谢大神!
回复

使用道具 举报

发表于 2022-4-4 18:32:40 | 显示全部楼层
winhex还能编脚本,太帅了!!
回复

使用道具 举报

发表于 2022-4-4 20:42:54 | 显示全部楼层
wintoflash 发表于 2022-4-4 18:24
凑个热闹
前段时间写的 diskfire 小程序,支持安装 GRUB4DOS MBR/PBR,支持安装到 MBR/GPT 分区表。
由于 ...

diskfire.exe mbr -i=GRUB4DOS (hd1)
这个(hd1)能否用盘符代替之啊?比如说:
diskfire.exe mbr -i=GRUB4DOS C:,这样子的命令,可以把C:盘所在的硬盘的MBR修改为g4d,用批处理还要判断很多。

grubinst直接直接盘符调用安装grldr.MBR。

点评

不支持。需要用 probe 从分区名反查卷标:diskfire.exe probe --letter [attachimg]499130[/attachimg] hd0 对应的是 \.\PhysicalDrive0, hd1 对应的是 \.\PhysicalDrive1, 以此类推。 但是分区就没有这种对应关  详情 回复 发表于 2022-4-4 21:09
回复

使用道具 举报

发表于 2022-4-4 21:09:58 | 显示全部楼层
liuzhaoyzz 发表于 2022-4-4 20:42
diskfire.exe mbr -i=GRUB4DOS (hd1)
这个(hd1)能否用盘符代替之啊?比如说:
diskfire.exe mbr -i=GRU ...

不支持。需要用 probe 从分区名反查卷标:diskfire.exe probe --letter
1.png
hd0 对应的是 \.\PhysicalDrive0, hd1 对应的是 \.\PhysicalDrive1, 以此类推。
但是分区就没有这种对应关系了:
1. 这个程序是基于 GRUB2 代码的,不好改。
2. 分区不一定会有卷标。

点评

就按照你上面的截图来说,已知一个盘符C:,就可以判定他位于(hd0)上面; 已知一个盘符D:或E:,就可以判定他位于(hd1)上面。 对于没有盘符的分区,不做要求。 就是说可以通过盘符求(hdx)。 这是单向映射,不是  详情 回复 发表于 2022-4-5 09:18
回复

使用道具 举报

发表于 2022-4-4 21:26:34 | 显示全部楼层
bootsect是用盘符的.diskrw写错盘可能就是有时和diskpart获取的磁盘号不一致
回复

使用道具 举报

发表于 2022-4-5 06:09:18 | 显示全部楼层
这么多编程高手在这,我也来点赞
回复

使用道具 举报

发表于 2022-4-5 09:18:48 来自手机 | 显示全部楼层
wintoflash 发表于 2022-4-4 21:09
不支持。需要用 probe 从分区名反查卷标:diskfire.exe probe --letter

hd0 对应的是 \.\PhysicalDriv ...

就按照你上面的截图来说,已知一个盘符C:,就可以判定他位于(hd0)上面;
已知一个盘符D:或E:,就可以判定他位于(hd1)上面。
对于没有盘符的分区,不做要求。

就是说可以通过盘符求(hdx)。
这是单向映射,不是反过来已知(hdx)求盘符呀。

点评

本身盘符和GRUB2分区的对应关系就是"猜"出来的。我不知道怎么用 windows api 来通过盘符获取它所在的磁盘。 按你这样说的,不好弄。  详情 回复 发表于 2022-4-5 10:11
回复

使用道具 举报

发表于 2022-4-5 10:11:04 | 显示全部楼层
liuzhaoyzz 发表于 2022-4-5 09:18
就按照你上面的截图来说,已知一个盘符C:,就可以判定他位于(hd0)上面;
已知一个盘符D:或E:,就可以判 ...

本身盘符和GRUB2分区的对应关系就是"猜"出来的。我不知道怎么用 windows api 来通过盘符获取它所在的磁盘。
按你这样说的,不好弄。

点评

那就靠“猜”吧,即使“猜”错了,也没事吧,因为后续写MBR引导扇区啥的,会进行判断吧,会设置安全边界,不会造成分区的数据损毁吧,顶多也就是写错了盘符,可能导致原本是windows.mbr的,变成了grldr.mbr,只要保  详情 回复 发表于 2022-4-5 11:21
回复

使用道具 举报

发表于 2022-4-5 10:25:54 来自手机 | 显示全部楼层
deviceiocontrol取出来是否一致难说
回复

使用道具 举报

发表于 2022-4-5 10:28:28 来自手机 | 显示全部楼层
都是一家的gdisk和ghost也遇到过不一致
回复

使用道具 举报

发表于 2022-4-5 11:21:42 | 显示全部楼层
wintoflash 发表于 2022-4-5 10:11
本身盘符和GRUB2分区的对应关系就是"猜"出来的。我不知道怎么用 windows api 来通过盘符获取它所在的磁盘 ...

那就靠“猜”吧,即使“猜”错了,也没事吧,因为后续写MBR引导扇区啥的,会进行判断吧,会设置安全边界,不会造成分区的数据损毁吧,顶多也就是写错了盘符,可能导致原本是windows.mbr的,变成了grldr.mbr,只要保证数据安全,写错盘符不是什么大问题。

高大上的c/c++还要搭配批处理通过分区判断(hdx),感觉low了点。

靠盘符定位硬盘(hdx)感觉简单多了,因为windows本来就是通过盘符来定位分区的。可以参考下grubinst或者bootice的效果,当然是在你有兴趣的前提下咯。

网上再找找看有没有什么API能够搞定这个的。不着急,慢慢来吧。

点评

api可以用上面说的DeviceIoControl试。下面的代码可以去pecmd里测下。 CALL $--qd --ret:&R Kernel32.dll,CreateFileW,$\\.\C:,#0,#3,#0,#3,#0,#0 ENVI$ &C=*12 0 CALL $--qd Kernel32.dll,DeviceIoControl,#%&  详情 回复 发表于 2022-4-6 10:45
我说了,不合适。  详情 回复 发表于 2022-4-5 11:27
回复

使用道具 举报

发表于 2022-4-5 11:27:24 | 显示全部楼层
liuzhaoyzz 发表于 2022-4-5 11:21
那就靠“猜”吧,即使“猜”错了,也没事吧,因为后续写MBR引导扇区啥的,会进行判断吧,会设置安全边界 ...

我说了,不合适。
回复

使用道具 举报

发表于 2022-4-5 11:45:28 来自手机 | 显示全部楼层
diskrw只收到一例猜错,不方便复现排除除,不确定是否使用者操作不当,主要还是使用人少,没动力深究
回复

使用道具 举报

发表于 2022-4-5 11:48:06 来自手机 | 显示全部楼层
狠多时候,你还在努力,但提问者已放弃
回复

使用道具 举报

 楼主| 发表于 2022-4-5 12:32:18 来自手机 | 显示全部楼层
@szwp  你说的这个有同感,没有回音了。
回复

使用道具 举报

 楼主| 发表于 2022-4-5 12:40:32 | 显示全部楼层
感觉winhex有点大

在批处理区搜索到一个帖子,可以使用脚本查找winhex.exe,然后使用它。这样文件体积小了不少。但是搜索需等待数秒。最好还是在当前目录复制一个单文件winhex.exe比较好。
回复

使用道具 举报

发表于 2022-4-5 12:52:39 | 显示全部楼层
本帖最后由 xianglang 于 2022-4-6 14:38 编辑

现在都不大喜欢用命令行了,只喜欢用图形界面的。

另外,在“此处打开命令行提示符”这个右键功能,以前是可以直接到指定目录下的,现在全到Windows目录下了,不知道是怎么回事,要输入一次盘符转才到。

点评

直接在资源管理器的地址栏输入 cmd.exe 回车打开 也挺方便的.  详情 回复 发表于 2022-5-15 19:21
图形界面的可试grubfm  详情 回复 发表于 2022-4-6 14:06
𦀣 长啥样的?  详情 回复 发表于 2022-4-5 15:59
回复

使用道具 举报

发表于 2022-4-5 15:59:48 | 显示全部楼层
xianglang 发表于 2022-4-5 12:52
现在都不大喜欢用命令行了,只喜欢用图形界面的。

另外,在“此处打开命令行提示符”这个右键功能,以前 ...

𦀣 长啥样的?

点评

五笔打错码,变成大字符集的了,是Windows目录。 又试了下,似乎是 CD 转路径,只能在系统本分区才直接转到,非系统分区要再输入一下盘符才行。哪个大神能改下 "cmd.exe /k \"cd %L\" " 这个命令,可以直接跨分区  详情 回复 发表于 2022-4-6 14:43
回复

使用道具 举报

发表于 2022-4-6 10:45:13 | 显示全部楼层
liuzhaoyzz 发表于 2022-4-5 11:21
那就靠“猜”吧,即使“猜”错了,也没事吧,因为后续写MBR引导扇区啥的,会进行判断吧,会设置安全边界 ...

api可以用上面说的DeviceIoControl试。下面的代码可以去pecmd里测下。

CALL $--qd --ret:&R Kernel32.dll,CreateFileW,$\\.\C:,#0,#3,#0,#3,#0,#0
ENVI$ &C=*12 0
CALL $--qd Kernel32.dll,DeviceIoControl,#%&R%,#2953344,#0,#0,*&C,#12,#0,#0
GETF &C,4#1,&P
MESS %&P%

点评

强!不过有个小问题,运行崩溃了,能修正一下吗? [attachimg]499228[/attachimg]  详情 回复 发表于 2022-4-6 12:45
看不懂pecmd代码。有c/c++的吗?  详情 回复 发表于 2022-4-6 11:25
回复

使用道具 举报

发表于 2022-4-6 11:25:07 | 显示全部楼层
szwp 发表于 2022-4-6 10:45
api可以用上面说的DeviceIoControl试。下面的代码可以去pecmd里测下。

CALL $--qd --ret:&R Kernel32. ...

看不懂pecmd代码。有c/c++的吗?

点评

https://blog.csdn.net/li740207611/article/details/52122776 看看这个,俺也不知道这是啥代码。没玩过C。  详情 回复 发表于 2022-4-6 11:30
回复

使用道具 举报

发表于 2022-4-6 11:30:24 | 显示全部楼层
wintoflash 发表于 2022-4-6 11:25
看不懂pecmd代码。有c/c++的吗?

https://blog.csdn.net/li740207611/article/details/52122776

看看这个,俺也不知道这是啥代码。没玩过C。
回复

使用道具 举报

发表于 2022-4-6 12:45:13 | 显示全部楼层
szwp 发表于 2022-4-6 10:45
api可以用上面说的DeviceIoControl试。下面的代码可以去pecmd里测下。

CALL $--qd --ret:&R Kernel32. ...


强!不过有个小问题,运行崩溃了,能修正一下吗?

1.png

点评

俺不太会玩PECMD,手里的是2018年或2020年。你用老版本的pecmd试下吧。  详情 回复 发表于 2022-4-6 13:02
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-2-23 14:02

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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