无忧启动论坛

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

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

    [复制链接]
跳转到指定楼层
1#
发表于 2019-11-8 12:04:35 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 liuzhaoyzz 于 2019-11-8 15:58 编辑

分享个判断当前系统是BIOS还是UEFI启动的小程序
DetectEFI32,50KB,adef提供,我重新编译,检测当前系统是BIOS启动还是UEFI启动。
http://bbs.wuyou.net/forum.php?m ... p;page=6#pid3792649
用VS2008重新编译,编译的时候选择静态编译,编译为32位程序,编译后exe文件52KB,亲测适用于XP,64位的WIN7 10,检测BIOS/UEFI启动模式正确无误。为了区别于adef兄的detectefiX86.exe(45KB),特地改名字为detectefi32.exe(52KB)。现奉上源代码和编译后的exe文件。

批处理调用示例.bat
  1. @echo off
  2. pushd "%~dp0"
  3. rem 检测BIOS/UEFI启动
  4. detectefi32 |find /i "Legacy" && (
  5.         set "winload=winload.exe"
  6.          goto :BIOS
  7. )||(
  8.         set "winload=winload.efi"
  9. goto :UEFI
  10. )
  11. popd

  12. :BIOS
  13.   pause
  14. exit /b

  15. :UEFI
  16.   pause
  17. exit /b
复制代码




温馨提示:bcdedit检查winload、wmic、msinfo32、powershell 、C:\Windows\Panther\setupact.log文件检测、注册表 HKLM\System\CurrentControlSet\Control\PEFirmwareType 检测什么的都不靠谱。

另外还有这个。判断当前系统是BIOS启动还是UEFI启动,分区表是MBR还是GPT(by双心)V1.3 - RAMOS - 无忧启动论坛 - Powered by Discuz! http://wuyou.net/forum.php?mod=viewthread&tid=412368

detectefi32.rar

25.46 KB, 下载次数: 412, 下载积分: 无忧币 -2

评分

参与人数 6无忧币 +40 收起 理由
wuxin9712 + 15
Hysanohsp + 5
1049616166 + 5 很给力!
liu_zhenfeng + 5 很给力!
有阴也有阳 + 5 很给力!
879792799 + 5 很给力!支持一下

查看全部评分

2#
 楼主| 发表于 2019-11-8 13:18:42 来自手机 | 显示全部楼层
本帖最后由 liuzhaoyzz 于 2019-11-8 13:43 编辑

一楼不是有吗detectefi32.exe(52KB)      
回复

使用道具 举报

3#
 楼主| 发表于 2019-11-8 13:29:44 | 显示全部楼层
本帖最后由 liuzhaoyzz 于 2019-11-8 13:32 编辑

支持efi引导的//只有win7及以上, 所以xp, 03系统就只能够bios引导  

的确,因为我测试了在XP上面运行一楼的小程序,判断也正常,所以就说支持XP判断。
GetFirmwareEnvironmentVariableA这个函数,WIN7以上的64位系统我测试了判断也正确,32位系统我没有测试,我没有32位的UEFI环境。        

点评

然而UEFI启动XP并不能判断 23333~ [attachimg]404686[/attachimg]  详情 回复 发表于 2019-11-8 17:29
回复

使用道具 举报

4#
 楼主| 发表于 2019-11-8 14:33:03 | 显示全部楼层
610644034 发表于 2019-11-8 14:28
bcdedit 工具应该是最权威的! 虽然用了系统API  GetFirmwareEnvironmentVariableA 但是 bcdedit 工具从层 ...


有些情况bcdedit根本就用不了,打不开,何谈权威?正因为bcdedit打开不靠谱,所以要重复造轮子。        

点评

那你有想过为什么bcdedit打不开吗?在完整的硬盘安装的系统里bcdedit显示无法打开启动配置存储只有一种情况:启动分区没有配置好。如果硬盘是MBR分区表,只有使用BIOS模式,而且引导文件存在活动分区下BCD才能被正确  详情 回复 发表于 2020-5-30 23:21
都用上uefi了, bcdedit还会有根本打不开的情况?? becdedit 都不权威, 还有什么是权威的? 就一句话的命令 bcdedit /enum {current} | find /i "winload.efi", 难吗?  详情 回复 发表于 2020-5-7 11:33
说句真心话! 你要是去逆向系统API 你就会发现 API 有的还是直接查注册表数据后返回的,所以谈何靠谱?  详情 回复 发表于 2019-11-8 15:02
回复

使用道具 举报

5#
 楼主| 发表于 2019-11-8 15:33:39 | 显示全部楼层
既然这样,你继续用bcdedit就是了。
回复

使用道具 举报

6#
 楼主| 发表于 2019-11-8 17:32:20 | 显示全部楼层
本帖最后由 liuzhaoyzz 于 2019-11-8 17:48 编辑

你那UEFI启动的XP是经过改造的吧,XP我测试了结果跟你截图是一样的。我没见过UEFI启动的XP。。。

点评

XP添加UEFI启动支持其实很简单,只要拷两个文件就可以。  详情 回复 发表于 2019-11-8 19:47
回复

使用道具 举报

7#
 楼主| 发表于 2019-11-8 20:03:19 | 显示全部楼层
江南一根葱 发表于 2019-11-8 19:26
有点好奇检测完了做些什么,
如果是efi的,则干些?
如果是bios的,则干些?

用于批处理啊,比如说修改BCD,如果是bios启动就用winload.exe,否则就用winload.efi。        

点评

其实我也暂时没有想到有什么用处。 winload 是不需要在bcd中指明的,引导程序会自动选择,bootmgfw.efi会使用winload.efi,bootmgr会使用winload.exe。bcd中需要明确的是device、osdevice、systemroot这三项。  详情 回复 发表于 2019-11-8 21:01
回复

使用道具 举报

8#
 楼主| 发表于 2019-11-11 10:04:15 来自手机 | 显示全部楼层
ostrichb 发表于 2019-11-10 17:24
其实要判断有一个简单的方法:运行msinfo32里面看一行字写的是传统就是BIOS uefi就是uefi启动

        PE里面哪里有msinfo32?正常系统有的都精简了,再说这里面显示的信息,怎么提取出来?比如用到某个bat vbs脚本里面?   还是API可靠。
回复

使用道具 举报

9#
 楼主| 发表于 2019-11-11 13:27:52 | 显示全部楼层
窄口牛 发表于 2019-11-11 12:10
pe判断没有意义,要判断的是系统的启动方式,和pe没有啥关系。

PE判断当然有意义,只是你没有遇到而已,我有这个需要。
回复

使用道具 举报

10#
 楼主| 发表于 2020-1-5 16:21:07 | 显示全部楼层
brook 发表于 2020-1-3 12:47
执行exe文件后一闪而退,不知怎么回事

先运行cmd,切换到DetectEFI32所在的目录,输入DetectEFI32,或者直接用一楼的批处理示例。

点评

谢谢版主,我试试  详情 回复 发表于 2020-1-5 19:46
回复

使用道具 举报

11#
 楼主| 发表于 2020-5-6 20:07:16 | 显示全部楼层
austere 发表于 2020-5-6 19:41
64位 win10  运行批处理后,按任意键后没有反馈就退出了,什么情况?

先运行cmd,切换到DetectEFI32所在的目录,输入DetectEFI32,或者直接用一楼的批处理示例。
回复

使用道具 举报

12#
 楼主| 发表于 2020-5-7 11:41:16 | 显示全部楼层
quya 发表于 2020-5-7 11:33
都用上uefi了, bcdedit还会有根本打不开的情况??

becdedit 都不权威, 还有什么是权威的?

你太年轻了,bcdedit打不开的情况你都没见过,你没见过的东西,不一定不存在!

点评

八成你没我年纪大。 bcdedit打不开的, 要么人为把它删除了, 要么系统里根本没有bcdedit。 如果人为删除再来说无法判断,那人家也可以把你的那个所谓小程序删除, 如果是后者, 比如linux当然无法判断是否uefi,  详情 回复 发表于 2020-5-7 11:55
回复

使用道具 举报

13#
 楼主| 发表于 2020-5-7 12:01:18 | 显示全部楼层
quya 发表于 2020-5-7 11:55
八成你没我年纪大。

bcdedit打不开的, 要么人为把它删除了, 要么系统里根本没有bcdedit。 如果人为 ...

       难道电脑里面存在的程序都能够运行?bcdedit存在的情况下,遇到较多情况还是打不开,如果依赖于这个bcdedit,批处理后面的命令都会失效。我们在玩RAMOS批处理制作的时候,碰到bcdedit无法运行的情况太多了。你在网上搜索下bcdedit不能运行是什么情况。

百度为您找到相关结果约3,640,000个,还不能说明问题?难道大家都是删除了?删除了怎么会有运行出错的提示?!

点评

说实话, 我不是很清楚ramos在bcdedit存在的情况下是否会运行出错, 而且这个ramos还是uefi启动的? 那既然都玩ramos了,这个判断的意义在哪我还是没看出来。 我不想去验证ramos这些小众环境里情况怎么样, 请告  详情 回复 发表于 2020-5-7 12:19
回复

使用道具 举报

14#
 楼主| 发表于 2020-5-7 12:45:08 来自手机 | 显示全部楼层
quya 发表于 2020-5-7 12:19
说实话, 我不是很清楚ramos在bcdedit存在的情况下是否会运行出错, 而且这个ramos还是uefi启动的?

...

        我说的bcdedit运行不了,不是指的在RAMOS中运行不了,而是在正常系统中运行不了!要制作RAMOS需要正常系统中运行bcdedit来修改添加启动项,而我们发现实战中,很多人正常的电脑里面bcdedit运行不了,所以我们重复造轮子,重复造轮子自然有造轮子的理由。你说什么出错判断跳转,这是哪儿跟哪儿啊!出错了获取不到正确的取值,跳转何用?

点评

有点夸张吧, 举不出个具体例子, 说了也没用。  详情 回复 发表于 2020-5-7 12:48
回复

使用道具 举报

15#
 楼主| 发表于 2020-5-7 12:48:23 来自手机 | 显示全部楼层
本帖最后由 liuzhaoyzz 于 2020-5-7 12:49 编辑
quya 发表于 2020-5-7 12:37
再多说2句, 如果你说的ramos 指的是pe, 那么bcdedit出错是正常的。 详情见我帖子 http://bbs.wuyou.net/f ...


        PE只是RAMOS的雏形,我来科普下他们的区别。http://wuyou.net/forum.php?mod=v ... amp;authorid=298214

我跟你说正常系统中转换的RAMOS,你跟我谈什么PE干啥?!
回复

使用道具 举报

16#
 楼主| 发表于 2020-5-7 12:51:30 来自手机 | 显示全部楼层
本帖最后由 liuzhaoyzz 于 2020-5-7 12:54 编辑
quya 发表于 2020-5-7 12:48
有点夸张吧, 举不出个具体例子, 说了也没用。


       RAMOS你没玩过,bcdedit运行不了你没见过,百度的几百万条搜索结果你直接无视,我还跟你拿什么证明?网友正常系统里面不能运行的多了去了,还需要证明什么?!

轮子造了自然有他的用处,你用不上不代表别人用不上。
回复

使用道具 举报

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

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

使用道具 举报

18#
 楼主| 发表于 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
回复

使用道具 举报

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

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

点评

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

使用道具 举报

20#
 楼主| 发表于 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 (35.76 KB, 下载次数: 89)

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

VXP-2021-11-22-15-16-10.png (40.16 KB, 下载次数: 92)

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

点评

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

使用道具 举报

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

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

使用道具 举报

22#
 楼主| 发表于 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
回复

使用道具 举报

23#
 楼主| 发表于 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
回复

使用道具 举报

24#
 楼主| 发表于 2021-11-27 11:46:04 | 显示全部楼层
wintoflash 发表于 2021-11-26 19:14
你这不是能看懂C吗。

无论什么语言,我的水平只能写“Hello world!”
回复

使用道具 举报

25#
 楼主| 发表于 2021-12-18 17:52:08 | 显示全部楼层
bjay2008xmy 发表于 2021-12-18 15:24
WIN10 64位用不了,批出理没有显示判断结果,只有一句按任意键继续。。

分享一个显示硬件信息的开源小程序nwinfo - 脚本讨论区 - 无忧启动论坛 - Powered by Discuz! http://wuyou.net/forum.php?mod=v ... &extra=page%3D1

直接用wintoflash的。
回复

使用道具 举报

26#
 楼主| 发表于 2023-3-16 11:50:35 | 显示全部楼层
wuhuayu 发表于 2023-3-16 01:27
大佬  能写个cmd选择文件夹或文件 小程序吗

可以用拖放模式啊,效果是把文件、文件夹拖到正在运行的批处理上,百度一艘一大堆,我就是百度来的。不难。
回复

使用道具 举报

27#
 楼主| 发表于 2023-4-18 17:49:07 | 显示全部楼层
wintoflash 发表于 2023-4-17 22:17
另外关于这个帖子 请问下有没有命令行工具添加UEFI引导序列?
记得有人说过用 bootice 不能修改 UEFI 启动 ...

好像见到论坛上有人反馈过,用bootice不能添加或者修改UEFI启动项,但我没有经历过,或者有经历过,忘了。
感觉上BOOTICE1.4版本对于添加修改UEFI启动项,有代码修正。
我联系过pauly,希望他开源,他没有答应。

回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-5-7 20:22

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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