无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
楼主: liuzhaoyzz

[分享] 分享个判断当前系统是BIOS还是UEFI启动的小程序

    [复制链接]
发表于 2020-5-31 13:23:16 | 显示全部楼层
ku588 发表于 2020-5-31 13:12
我管PE环境也叫系统,我在PE下测试不行吗?能判断PE系统启动环境吗?
如果不能判断当前PE系统环境就注明 ...

你测试PE的启动模式有个鸟用

点评

你觉得没用不等于别人没用,不懂少说话  详情 回复 发表于 2020-5-31 13:24
回复

使用道具 举报

发表于 2020-5-31 13:24:28 | 显示全部楼层
熄滅的蠟燭 发表于 2020-5-31 13:23
你测试PE的启动模式有个鸟用

你觉得没用不等于别人没用,不懂少说话

点评

那你说说判断PE启动模式有什么用?  详情 回复 发表于 2020-5-31 13:29
回复

使用道具 举报

发表于 2020-5-31 13:29:11 | 显示全部楼层
ku588 发表于 2020-5-31 13:24
你觉得没用不等于别人没用,不懂少说话

那你说说判断PE启动模式有什么用?

点评

如果仅仅是判断当前系统是BIOS还是UEFI启动,如果没有其它用武之地,那这个工具就没有价值,比如用于远程系统维护安装系统(PE下安装系统),快速判断客户当前电脑系统使用环境,对应安装相应的系统等。除了上面说的  详情 回复 发表于 2020-5-31 13:44
回复

使用道具 举报

发表于 2020-5-31 13:30:19 | 显示全部楼层
熄滅的蠟燭 发表于 2020-5-30 23:31
我敢肯定你的这个肯定不是UEFI启动。

信不信由你
http://bbs.wuyou.net/forum.php?m ... 20307&mobile=no

点评

看了你的帖子,你也是真够闲的,我先不管你的是不是UEFI。我就想问问弄这个32位的XP来UEFI启动有意义吗?现在有谁的电脑是基于x86的UEFI?就算你的可以UEFI启动,64位的UEFI根本就不能启动32位的系统。而且这个帖子  详情 回复 发表于 2020-5-31 13:41
回复

使用道具 举报

发表于 2020-5-31 13:41:40 | 显示全部楼层
朱玛12345678 发表于 2020-5-31 13:30
信不信由你
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=420307&mobile=no

看了你的帖子,你也是真够闲的,我先不管你的是不是UEFI。我就想问问弄这个32位的XP来UEFI启动有意义吗?现在有谁的电脑是基于x86的UEFI?就算你的可以UEFI启动,64位的UEFI根本就不能启动32位的系统。而且这个帖子判断启动模式是为了添加PE引导的时候区分winload.exe和winload.efi。XP连个BCD都不能添加,你要UEFI有个毛用?

点评

有没有意义不是由你来定。 错了就是错了,别狡辩。  详情 回复 发表于 2020-5-31 14:09
回复

使用道具 举报

发表于 2020-5-31 13:44:49 | 显示全部楼层
熄滅的蠟燭 发表于 2020-5-31 13:29
那你说说判断PE启动模式有什么用?

如果仅仅是判断当前系统是BIOS还是UEFI启动,如果没有其它用武之地,那这个工具就没有价值,比如用于远程系统维护安装系统(PE下安装系统),快速判断客户当前电脑系统使用环境,对应安装相应的系统等。除了上面说的吧,我就是想验证下这个工具在PE系统下是否也能判断正确,接下来我再考虑这个工具对我来说还有没有别的用处,就这一条理由就够了。

点评

远程安装系统,如果客户的电脑是可以正常开机的,那可以直接在系统里判断,重启后进到PE里自动执行安装。如果用户的电脑不能正常开机,如果PE的启动模式是UEFI,正好硬盘的分区形式和PE启动模式对应,PE里可以直接用  详情 回复 发表于 2020-5-31 13:56
回复

使用道具 举报

发表于 2020-5-31 13:56:17 | 显示全部楼层
ku588 发表于 2020-5-31 13:44
如果仅仅是判断当前系统是BIOS还是UEFI启动,如果没有其它用武之地,那这个工具就没有价值,比如用于远程 ...

远程安装系统,如果客户的电脑是可以正常开机的,那可以直接在系统里判断,重启后进到PE里自动执行安装。如果用户的电脑不能正常开机,如果PE的启动模式是UEFI,正好硬盘的分区形式和PE启动模式对应,PE里可以直接用bcdedit读取硬盘里的BCD文件。如果PE是启动模式是BIOS,硬盘里的分区形式和启动模式对应也可以正确读取到,如果不对应那就读取不到。我最近在写启动安装系统的批处理。就是可以在系统里判断系统启动模式,配置好相关参数,自动添加PE引导重启进PE进行系统安装。如果PE的启动模式和硬盘分区形式不对应,如果是我写脚本的话,我可以通过for循环遍历一遍所有的分区,看有几个系统,再分别判断这些系统所在的硬盘的分区表,如果是MBR,就寻找活动分区。如果是GPT就寻找EFI系统分区。这个帖子里的工具就是在系统里判断启动模式,然后添加对应模式的PE引导文件而已。BIOS模式是winload.exe,UEFI模式是winload.efi
回复

使用道具 举报

发表于 2020-5-31 14:09:36 | 显示全部楼层
熄滅的蠟燭 发表于 2020-5-31 13:41
看了你的帖子,你也是真够闲的,我先不管你的是不是UEFI。我就想问问弄这个32位的XP来UEFI启动有意义吗? ...

有没有意义不是由你来定。
错了就是错了,别狡辩。

点评

我才不管什么错不错,你以为错了就错了呗。反正我就是认为让XP做UEFI没有意义  详情 回复 发表于 2020-5-31 14:19
回复

使用道具 举报

发表于 2020-5-31 14:18:56 | 显示全部楼层
“先运行cmd,切换到DetectEFI32所在的目录,输入DetectEFI32,或者直接用一楼的批处理示例。”

还是有点麻烦,如果能直接打开程序,显示系统BIOS还是UEFI启动 就方便了
回复

使用道具 举报

发表于 2020-5-31 14:19:28 | 显示全部楼层
wintoflash 发表于 2020-5-31 14:09
有没有意义不是由你来定。
错了就是错了,别狡辩。

我才不管什么错不错,你以为错了就错了呗。反正我就是认为让XP做UEFI没有意义
回复

使用道具 举报

发表于 2020-5-31 16:22:30 | 显示全部楼层
试试。 test.7z (10.58 KB, 下载次数: 217)

点评

感谢大神分享工具! 源代码可否分享下?  详情 回复 发表于 2021-1-13 11:00
经实机测试,BIOS-UEFI兼容模式下,在硬盘版RAMOS下测试,还是这个wintoflash大 的 secure boot修改的判断准确,之前的那两个程序与BootModeCheck都判断为UEFI,实际是BIOS启动,这个判断为Legacy是正确的。  详情 回复 发表于 2020-5-31 23:18
我有个问题。我刚刚在虚拟机下用UEFI测试了一下,硬盘使用MBR分区表,我在虚拟机板块找到一个修改过的ROM,UEFI可以直接读取NTFS分区下的efi启动文件。我直接把UEFI的引导文件放在了原系统所在分区下,可能是因为之  详情 回复 发表于 2020-5-31 16:57
我做了个多合一的系统环境检测工具,其中用了层主提供的2个程序,还有wintoflash大的 secure boot,还有BootModeCheck, 试过层主以前提供的这两个程序,32位与64位分别使用检测结果准确些,这个附件相比与以前的  详情 回复 发表于 2020-5-31 16:48
回复

使用道具 举报

发表于 2020-5-31 16:48:23 | 显示全部楼层

我做了个多合一的系统环境检测工具,其中用了层主提供的2个程序,还有wintoflash大的 secure boot,还有BootModeCheck,

试过层主以前提供的这两个程序,32位与64位分别使用检测结果准确些,这个附件相比与以前的有更新吧。
回复

使用道具 举报

发表于 2020-5-31 16:57:35 | 显示全部楼层

我有个问题。我刚刚在虚拟机下用UEFI测试了一下,硬盘使用MBR分区表,我在虚拟机板块找到一个修改过的ROM,UEFI可以直接读取NTFS分区下的efi启动文件。我直接把UEFI的引导文件放在了原系统所在分区下,可能是因为之前设置了活动分区的原因,进到系统之后bcdedit可以正确读取到BCD,你发的两个工具也可以正确识别到。但是当我把硬盘切换到GPT分区表之后,又和刚才一样,直接把UEFI引导文件放在了系统所在分区下,但是这个时候进到系统之后,bcdedit就读取不到BCD了,当我手动用regedit把BCD挂载到HKLM\BCD00000000之后,bcdedit还是读取不到,但是用BOOTICE可以读取。我想问一下,如果这种情况下,批处理应该怎么编辑BCD
回复

使用道具 举报

发表于 2020-5-31 17:03:00 | 显示全部楼层
71楼的 test.7z 其实就是 wintoflash 的 secure boot,偶只是修改了一下显示结果。

点评

是这样的,好的谢谢;同时感谢 wintoflash大 的 secure boot  详情 回复 发表于 2020-5-31 17:19
回复

使用道具 举报

发表于 2020-5-31 17:19:00 | 显示全部楼层
adef 发表于 2020-5-31 17:03
71楼的 test.7z 其实就是 wintoflash 的 secure boot,偶只是修改了一下显示结果。

是这样的,好的谢谢;同时感谢 wintoflash大 的 secure boot
回复

使用道具 举报

发表于 2020-5-31 23:18:16 | 显示全部楼层
本帖最后由 ku588 于 2020-5-31 23:34 编辑

经实机测试,BIOS-UEFI兼容模式下,在硬盘版RAMOS下测试,还是这个wintoflash大 的 secure boot修改的判断准确,之前的那两个程序与BootModeCheck都判断为UEFI,实际是Legacy BIOS启动,这个判断为Legacy是正确的。
回复

使用道具 举报

 楼主| 发表于 2021-1-13 11:00:53 | 显示全部楼层

感谢大神分享工具!
源代码可否分享下?
回复

使用道具 举报

发表于 2021-1-14 09:20:06 | 显示全部楼层
多谢楼主分享。
回复

使用道具 举报

发表于 2021-11-19 20:36:42 | 显示全部楼层
挖个坟。
最近写了个打印各种系统信息的小工具。
https://github.com/a1ive/nwinfo/releases
使用 nwinfo.exe --sys 可以显示固件类型和安全启动等信息。
1.png
使用 nwinfo.exe --help 可以查看帮助。
如果只需要 nwinfo --sys 这一项功能的话,可以只保留exe文件。

点评

试了下,非常强大!感谢! 如果你早点写出有这么强大的工具,我们折腾RAMOS就不用上VC+autoit3+批处理各种折腾了。  详情 回复 发表于 2021-11-20 11:01
回复

使用道具 举报

 楼主| 发表于 2021-11-20 11:01:45 | 显示全部楼层
wintoflash 发表于 2021-11-19 20:36
挖个坟。
最近写了个打印各种系统信息的小工具。
https://github.com/a1ive/nwinfo/releases

试了下,非常强大!感谢!
如果你早点写出有这么强大的工具,我们折腾RAMOS就不用上VC+autoit3+批处理各种折腾了。        

点评

忘记说了,这个工具只支持 Win7 及以上系统 (我在内部主动做的限制)。 做这个工具,最初只是因为江南一根葱想在PE下获取网络IP和连接速率,所以我写了个列出网络信息的小程序。 后来 PE 群里面的一些人想做个桌面  详情 回复 发表于 2021-11-20 11:24
回复

使用道具 举报

发表于 2021-11-20 11:24:24 | 显示全部楼层
liuzhaoyzz 发表于 2021-11-20 11:01
试了下,非常强大!感谢!
如果你早点写出有这么强大的工具,我们折腾RAMOS就不用上VC+autoit3+批处理各 ...

忘记说了,这个工具只支持 Win7 及以上系统 (我在内部主动做的限制)。
做这个工具,最初只是因为江南一根葱想在PE下获取网络IP和连接速率,所以我写了个列出网络信息的小程序。
后来 PE 群里面的一些人想做个桌面信息显示工具,所以我加上了免驱动获取各种硬件/系统信息的功能。

点评

这个限制不行啊,希望改进,希望能够通杀windows系统,不然的话XP还要分开处理,麻烦啊。  详情 回复 发表于 2021-11-20 11:36
回复

使用道具 举报

 楼主| 发表于 2021-11-20 11:36:28 | 显示全部楼层
wintoflash 发表于 2021-11-20 11:24
忘记说了,这个工具只支持 Win7 及以上系统 (我在内部主动做的限制)。
做这个工具,最初只是因为江南一 ...

这个限制不行啊,希望改进,希望能够通杀windows系统,不然的话XP还要分开处理,麻烦啊。

点评

没有意义。不做。  详情 回复 发表于 2021-11-20 11:43
回复

使用道具 举报

发表于 2021-11-20 11:43:52 | 显示全部楼层
本帖最后由 wintoflash 于 2021-11-20 11:46 编辑
liuzhaoyzz 发表于 2021-11-20 11:36
这个限制不行啊,希望改进,希望能够通杀windows系统,不然的话XP还要分开处理,麻烦啊。

没有意义。不做。
https://github.com/a1ive/nwinfo/ ... 2dfe2f/nwinfo.c#L11
你自己把IsWindows7OrGreater的那个if加大括号删掉,再编译出来就行了。不过一些功能可能会出问题。
回复

使用道具 举报

发表于 2021-11-22 15:06:06 | 显示全部楼层
现在nwinfo可以在XP下运行了,但是大部分功能会出错。
判断固件类型是可以的。

点评

试了下,虚拟机里面的xp,判断固件类型没有问题。 nwinfo_x86 --sys  详情 回复 发表于 2021-11-22 15:19
回复

使用道具 举报

 楼主| 发表于 2021-11-22 15:19:40 | 显示全部楼层
wintoflash 发表于 2021-11-22 15:06
现在nwinfo可以在XP下运行了,但是大部分功能会出错。
判断固件类型是可以的。

试了下,虚拟机里面的xp,判断固件类型没有问题。

nwinfo_x86 --sys


      

VXP-2021-11-22-15-14-22.png
VXP-2021-11-22-15-16-10.png

点评

现在在xp下除了不能获取acpi之外,其他的功能都可以使用了。 (感觉没必要再为xp单独实现获取acpi的功能)  详情 回复 发表于 2021-11-26 14:35
回复

使用道具 举报

发表于 2021-11-26 14:35:10 | 显示全部楼层
liuzhaoyzz 发表于 2021-11-22 15:19
试了下,虚拟机里面的xp,判断固件类型没有问题。

nwinfo_x86 --sys

现在在xp下除了不能获取acpi之外,其他的功能都可以使用了。
(感觉没必要再为xp单独实现获取acpi的功能)

点评

static void PrintFwInfo(void) { DWORD VarSize = 0; UINT8 SecureBoot = 0; GetFirmwareEnvironmentVariableA("", "{00000000-0000-0000-0000-000000000000}", NULL, 0); if (GetLastError() == ERROR_IN  详情 回复 发表于 2021-11-26 15:52
回复

使用道具 举报

发表于 2021-11-26 15:03:47 来自手机 | 显示全部楼层
经65535位网友测试,我的方案可能适合dos~win11系统

点评

32位保护模式的程序,怎么可能运行在16位的DOS上面?吹牛不打草稿  详情 回复 发表于 2021-11-26 15:20
回复

使用道具 举报

 楼主| 发表于 2021-11-26 15:09:05 | 显示全部楼层
wintoflash 发表于 2021-11-26 14:35
现在在xp下除了不能获取acpi之外,其他的功能都可以使用了。
(感觉没必要再为xp单独实现获取acpi的功能)

xp的ACPI感觉没什么必要。谢谢!        
回复

使用道具 举报

 楼主| 发表于 2021-11-26 15:20:43 | 显示全部楼层
本帖最后由 liuzhaoyzz 于 2021-11-26 15:22 编辑
江南一根葱 发表于 2021-11-26 15:03
经65535位网友测试,我的方案可能适合dos~win11系统

32位保护模式的程序,怎么可能运行在16位实模式的DOS上面?吹牛不打草稿

DetectEFI32感觉在PE里面判断不准确。     

点评

正是因为不能运行,所以不影响判断结果  详情 回复 发表于 2021-11-26 20:59
正是因为不能运行,所以不影响判断结果  详情 回复 发表于 2021-11-26 20:59
正是因为不能运行,所以不影响判断结果  详情 回复 发表于 2021-11-26 20:59
正是因为不能运行,所以不影响判断结果  详情 回复 发表于 2021-11-26 20:58
回复

使用道具 举报

 楼主| 发表于 2021-11-26 15:52:44 | 显示全部楼层
wintoflash 发表于 2021-11-26 14:35
现在在xp下除了不能获取acpi之外,其他的功能都可以使用了。
(感觉没必要再为xp单独实现获取acpi的功能)

static void PrintFwInfo(void)
{
        DWORD VarSize = 0;
        UINT8 SecureBoot = 0;
        GetFirmwareEnvironmentVariableA("", "{00000000-0000-0000-0000-000000000000}", NULL, 0);
        if (GetLastError() == ERROR_INVALID_FUNCTION)
                printf("Firmware: Legacy BIOS\n");
        else
        {
                printf("Firmware: UEFI\n");
                VarSize = GetFirmwareEnvironmentVariableA("SecureBoot", GV_GUID, &SecureBoot, sizeof(uint8_t));
                if (VarSize)
                        printf("Secure Boot: %s\n", SecureBoot ? "enabled" : "disabled");
                else
                        printf("Secure Boot: unsupported\n");
               
        }
}

Secure Boot结果好像有三种状态,enabled,disabled,unsupported,这几个关键词,是批处理需要捕捉的。



点评

你这不是能看懂C吗。  详情 回复 发表于 2021-11-26 19:14
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-3-29 17:12

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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