无忧启动论坛

标题: 分享个判断当前系统是BIOS还是UEFI启动的小程序 [打印本页]

作者: liuzhaoyzz    时间: 2019-11-8 12:04
标题: 分享个判断当前系统是BIOS还是UEFI启动的小程序
本帖最后由 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, 下载次数: 434, 下载积分: 无忧币 -2


作者: maghreb    时间: 2019-11-8 12:20
前排落定
作者: maghreb    时间: 2019-11-8 12:30
写个批处理,判断是什么模式启动后,重启在DOS下导入安装同目录下的WIM或ESD系统(或备份系统到同目录下),并能增加WIM格式的PE引导到BCD里,如此便解决了很多不会安装电脑的困扰
作者: 指南针    时间: 2019-11-8 13:08
温馨提示:bcdedit检查winload、wmic、powershell 、C:\Windows\Panther\setupact.log文件检测、注册表 HKLM\System\CurrentControlSet\Control\PEFirmwareType 检测什么的都不靠谱。


楼主说这些检测都不靠谱,那么你是如何检测的?
作者: liuzhaoyzz    时间: 2019-11-8 13:18
本帖最后由 liuzhaoyzz 于 2019-11-8 13:43 编辑

一楼不是有吗detectefi32.exe(52KB)      
作者: foxfirefox    时间: 2019-11-8 13:21
本帖最后由 foxfirefox 于 2019-11-8 13:24 编辑

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

    //2, win7,8,8.1,10等系统, 可以用下面的代码, 本质上就是GetFirmwareEnvironmentVariableA, 或者GetFirmwareType这两个api的调用  

    #include <Windows.h>  

    #include <Winbase.h>  //GetFirmwareEnvironmentVariableA  和   GetFirmwareType的头文件  

    #include <iostream>  

    using namespace std;  

    void main()  

    {  

    //For Windows 8/Server 2012 and above可用  

    /*

    typedef enum _FIRMWARE_TYPE {

    FirmwareTypeUnknown = 0,

    FirmwareTypeBios = 1,

    FirmwareTypeUefi = 2,

    FirmwareTypeMax = 3

    } FIRMWARE_TYPE, *PFIRMWARE_TYPE;

    */  

    FIRMWARE_TYPE a;  

    GetFirmwareType(&a);  

    switch (a)  

    {  

    case FirmwareTypeUnknown:  

    cout << "不知名引导" << endl; break;  

    case FirmwareTypeBios:  

    cout << "Bios引导" << endl; break;  

    case FirmwareTypeUefi:  

    cout << "Uefi引导" << endl; break;  

    case FirmwareTypeMax:  

    cout << "Not implemented" << endl; break;  

    }  

    //Windows 7/Server 2008R2 and above可用  

    GetFirmwareEnvironmentVariableA("", "{00000000-0000-0000-0000-000000000000}", NULL, 0);  

    if (GetLastError() == ERROR_INVALID_FUNCTION)  

    //API not supported; this is a legacy BIOS  

    cout << "Bios引导" << endl;   

    else  

    //API error (expected) but call is supported.This is UEFI.  

    cout << "Uefi引导" << endl;   

    system("pause");  

    }  

这个是百度上搜来的一段代码。
楼主使用的的代码只是后面的一段。。。。

GetFirmwareEnvironmentVariableA("", "{00000000-0000-0000-0000-000000000000}", NULL, 0);  

    if (GetLastError() == ERROR_INVALID_FUNCTION)  

    //API not supported; this is a legacy BIOS  

    cout << "Bios引导" << endl;   

    else  

    //API error (expected) but call is supported.This is UEFI.  

    cout << "Uefi引导" << endl;   

    system("pause");  

    }  
作者: wxh0712    时间: 2019-11-8 13:24
这个软件好用吗
作者: liuzhaoyzz    时间: 2019-11-8 13:29
本帖最后由 liuzhaoyzz 于 2019-11-8 13:32 编辑

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

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

作者: 610644034    时间: 2019-11-8 14:28
bcdedit 工具应该是最权威的! 虽然用了系统API  GetFirmwareEnvironmentVariableA 但是 bcdedit 工具从层面上看最少也用这个API甚至用比这个还要底层的API。
作者: liuzhaoyzz    时间: 2019-11-8 14:33
610644034 发表于 2019-11-8 14:28
bcdedit 工具应该是最权威的! 虽然用了系统API  GetFirmwareEnvironmentVariableA 但是 bcdedit 工具从层 ...


有些情况bcdedit根本就用不了,打不开,何谈权威?正因为bcdedit打开不靠谱,所以要重复造轮子。        
作者: chishingchan    时间: 2019-11-8 14:40
哪个谁谁谁给楼主版主评负分!打击人吗?!

这个检测以前本坛有讨论过,方式好像有好几个。
作者: 610644034    时间: 2019-11-8 15:02
liuzhaoyzz 发表于 2019-11-8 14:33
有些情况bcdedit根本就用不了,打不开,何谈权威?正因为bcdedit打开不靠谱,所以要重复造轮子。       ...

说句真心话! 你要是去逆向系统API 你就会发现 API 有的还是直接查注册表数据后返回的,所以谈何靠谱?
作者: liuzhaoyzz    时间: 2019-11-8 15:33
既然这样,你继续用bcdedit就是了。
作者: 2012jiashanni    时间: 2019-11-8 15:43
难道 GetFirmwareEnvironmentVariableA  不香吗
作者: moran    时间: 2019-11-8 16:37
感谢分享,另外请教一下大佬,现在纯脚本还是没啥好办法吗?
作者: 朱玛12345678    时间: 2019-11-8 17:29
liuzhaoyzz 发表于 2019-11-8 13:29
的确,因为我测试了在XP上面运行一楼的小程序,判断也正常,所以就说支持XP判断。
GetFirmwareEnvironme ...

然而UEFI启动XP并不能判断 23333~


作者: liuzhaoyzz    时间: 2019-11-8 17:32
本帖最后由 liuzhaoyzz 于 2019-11-8 17:48 编辑

你那UEFI启动的XP是经过改造的吧,XP我测试了结果跟你截图是一样的。我没见过UEFI启动的XP。。。
作者: hilsonma    时间: 2019-11-8 17:56
感谢分享。
我的示例:
  1. @echo off
  2. pushd "%~dp0"
  3. rem 检测BIOS/UEFI启动
  4. for /f %%a in ('detectefi32') do set bootdect=%%a
  5. goto %bootdect%

  6. :UEFI
  7. set winload=winload.efi
  8. echo %winload%
  9. pause
  10. exit /b

  11. :Legacy
  12. set winload=winload.exe
  13. echo %winload%
  14. pause
  15. exit /b
复制代码

作者: 江南一根葱    时间: 2019-11-8 19:26
有点好奇检测完了做些什么,
如果是efi的,则干些?
如果是bios的,则干些?
我一般都决定好启动前要做些什么。。。
作者: 江南一根葱    时间: 2019-11-8 19:36
不过这个问题我的思路是,提取winload.exe和winload.efi的访问时间,哪个时间迟我觉得就是哪个启动的。

作者: 朱玛12345678    时间: 2019-11-8 19:47
liuzhaoyzz 发表于 2019-11-8 17:32
你那UEFI启动的XP是经过改造的吧,XP我测试了结果跟你截图是一样的。我没见过UEFI启动的XP。。。


XP添加UEFI启动支持其实很简单,只要拷两个文件就可以。这个我早就做到了,只不过一直没公开教程而已。
作者: liuzhaoyzz    时间: 2019-11-8 20:03
江南一根葱 发表于 2019-11-8 19:26
有点好奇检测完了做些什么,
如果是efi的,则干些?
如果是bios的,则干些?

用于批处理啊,比如说修改BCD,如果是bios启动就用winload.exe,否则就用winload.efi。        
作者: hilsonma    时间: 2019-11-8 21:01
liuzhaoyzz 发表于 2019-11-8 20:03
用于批处理啊,比如说修改BCD,如果是bios启动就用winload.exe,否则就用winload.efi。

其实我也暂时没有想到有什么用处。

winload 是不需要在bcd中指明的,引导程序会自动选择,bootmgfw.efi会使用winload.efi,bootmgr会使用winload.exe。bcd中需要明确的是device、osdevice、systemroot这三项。
作者: gnuxwy    时间: 2019-11-8 21:17
哦,检测bios和uefi的小工具啊,下来备用之,毕竟以后还氏有可能用到uefi主板的。。。

多谢楼主分享。
作者: ostrichb    时间: 2019-11-10 17:24
其实要判断有一个简单的方法:运行msinfo32里面看一行字写的是传统就是BIOS uefi就是uefi启动
作者: 窄口牛    时间: 2019-11-10 18:15
ostrichb 发表于 2019-11-10 17:24
其实要判断有一个简单的方法:运行msinfo32里面看一行字写的是传统就是BIOS uefi就是uefi启动

你那是一般的用户环境,这里是无忧,搞引导的地方,各种复杂的系统环境都有。
作者: liuzhaoyzz    时间: 2019-11-11 10:04
ostrichb 发表于 2019-11-10 17:24
其实要判断有一个简单的方法:运行msinfo32里面看一行字写的是传统就是BIOS uefi就是uefi启动

        PE里面哪里有msinfo32?正常系统有的都精简了,再说这里面显示的信息,怎么提取出来?比如用到某个bat vbs脚本里面?   还是API可靠。
作者: 窄口牛    时间: 2019-11-11 12:10
pe判断没有意义,要判断的是系统的启动方式,和pe没有啥关系。
作者: liuzhaoyzz    时间: 2019-11-11 13:27
窄口牛 发表于 2019-11-11 12:10
pe判断没有意义,要判断的是系统的启动方式,和pe没有啥关系。

PE判断当然有意义,只是你没有遇到而已,我有这个需要。
作者: brook    时间: 2020-1-3 12:47
执行exe文件后一闪而退,不知怎么回事
作者: liuzhaoyzz    时间: 2020-1-5 16:21
brook 发表于 2020-1-3 12:47
执行exe文件后一闪而退,不知怎么回事

先运行cmd,切换到DetectEFI32所在的目录,输入DetectEFI32,或者直接用一楼的批处理示例。
作者: brook    时间: 2020-1-5 19:46
liuzhaoyzz 发表于 2020-1-5 16:21
先运行cmd,切换到DetectEFI32所在的目录,输入DetectEFI32,或者直接用一楼的批处理示例。

谢谢版主,我试试
作者: 创新科技2015    时间: 2020-1-16 08:36
        很给力!
作者: Anson4    时间: 2020-3-19 15:25
朱玛12345678 发表于 2019-11-8 17:29
然而UEFI启动XP并不能判断 23333~

请问,这个环境用BCDEDIT来判断准确吗?
作者: 朱玛12345678    时间: 2020-3-19 16:07
Anson4 发表于 2020-3-19 15:25
请问,这个环境用BCDEDIT来判断准确吗?

不能,Windows XP没有BCD文件和bcdedit程序。
作者: Anson4    时间: 2020-3-19 17:07
朱玛12345678 发表于 2020-3-19 16:07
不能,Windows XP没有BCD文件和bcdedit程序。

谢谢!
作者: Anson4    时间: 2020-3-21 10:23
求编译一个64位的,因为使用环境的问题,32位的运行不了。
作者: ai20110304    时间: 2020-5-3 15:41
bcdedit /enum {current} | findstr /i "winload.exe" && echo legacy || echo uefi
作者: austere    时间: 2020-5-6 19:41
64位 win10  运行批处理后,按任意键后没有反馈就退出了,什么情况?
作者: liuzhaoyzz    时间: 2020-5-6 20:07
austere 发表于 2020-5-6 19:41
64位 win10  运行批处理后,按任意键后没有反馈就退出了,什么情况?

先运行cmd,切换到DetectEFI32所在的目录,输入DetectEFI32,或者直接用一楼的批处理示例。
作者: quya    时间: 2020-5-7 11:33
本帖最后由 quya 于 2020-5-7 11:37 编辑
liuzhaoyzz 发表于 2019-11-8 14:33
有些情况bcdedit根本就用不了,打不开,何谈权威?正因为bcdedit打开不靠谱,所以要重复造轮子。       ...

都用上uefi了, bcdedit还会有根本打不开的情况??

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

就一句话的命令 bcdedit /enum {current} | find /i "winload.efi", 难吗?
再插一句, 如果碰到xp之类的 bcdedit 出现“bad command”, 那就直接判断为bios呗! 难不成还有uefi出现?

作者: liuzhaoyzz    时间: 2020-5-7 11:41
quya 发表于 2020-5-7 11:33
都用上uefi了, bcdedit还会有根本打不开的情况??

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

你太年轻了,bcdedit打不开的情况你都没见过,你没见过的东西,不一定不存在!
作者: quya    时间: 2020-5-7 11:55
liuzhaoyzz 发表于 2020-5-7 11:41
你太年轻了,bcdedit打不开的情况你都没见过,你没见过的东西,不一定不存在!

八成你没我年纪大。

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

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

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

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

作者: quya    时间: 2020-5-7 12:19
本帖最后由 quya 于 2020-5-7 12:25 编辑
liuzhaoyzz 发表于 2020-5-7 12:01
难道电脑里面存在的程序都能够运行?bcdedit存在的情况下,遇到较多情况还是打不开,如果依赖于这 ...

说实话, 我不是很清楚ramos在bcdedit存在的情况下是否会运行出错, 而且这个ramos还是uefi启动的?

那既然都玩ramos了,这个判断的意义在哪我还是没看出来。 我不想去验证ramos这些小众环境里情况怎么样, 请告诉我一般正常系统下有无什么例子来证明bcdedit无法运行, 系统却是uefi的情况。

另外批处理bcdedit命令失效不会造成后面的命令都失效, 加个命令出错处理就行了。用不了bcdedit,就像我前面说的bad command, 照样可以判断这是个bios系统, 有什么问题吗? 简单的|| 或者&& 就可以处理, 复杂一点就不用我说了, 你会编程你懂的。
举例乱写一个命令: tjbgxl 2>nul||echo 没有这条命令  运行的好好的, 不会因为 “tjbgxl”这个命令造成任何后果。

作者: quya    时间: 2020-5-7 12:37
再多说2句, 如果你说的ramos 指的是pe, 那么bcdedit出错是正常的。 详情见我帖子 http://bbs.wuyou.net/forum.php?mod=viewthread&tid=403765

因为 " PE中根本没有BCD文件 所以命令 bcdedit 因为找不到配置文件出错, 更不用说 bcdedit /enum {current}, 整个都没有,当然也无 {current}"

但是判断PE本身是否uefi是没有啥意义的。

作者: liuzhaoyzz    时间: 2020-5-7 12:45
quya 发表于 2020-5-7 12:19
说实话, 我不是很清楚ramos在bcdedit存在的情况下是否会运行出错, 而且这个ramos还是uefi启动的?

...

        我说的bcdedit运行不了,不是指的在RAMOS中运行不了,而是在正常系统中运行不了!要制作RAMOS需要正常系统中运行bcdedit来修改添加启动项,而我们发现实战中,很多人正常的电脑里面bcdedit运行不了,所以我们重复造轮子,重复造轮子自然有造轮子的理由。你说什么出错判断跳转,这是哪儿跟哪儿啊!出错了获取不到正确的取值,跳转何用?
作者: liuzhaoyzz    时间: 2020-5-7 12:48
本帖最后由 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干啥?!

作者: quya    时间: 2020-5-7 12:48
本帖最后由 quya 于 2020-5-7 12:50 编辑
liuzhaoyzz 发表于 2020-5-7 12:45
...很多人正常的电脑里面bcdedit运行不了 ...

有点夸张吧, 举不出个具体例子, 说了也没用。
好了, 不想跟你再辩了, 你认为有造轮子的必要, 那就造吧。

作者: liuzhaoyzz    时间: 2020-5-7 12:51
本帖最后由 liuzhaoyzz 于 2020-5-7 12:54 编辑
quya 发表于 2020-5-7 12:48
有点夸张吧, 举不出个具体例子, 说了也没用。


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

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

作者: 1518630030    时间: 2020-5-15 11:25
谢谢分享
作者: 610644034    时间: 2020-5-16 11:36
本帖最后由 610644034 于 2020-5-16 11:39 编辑
quya 发表于 2020-5-7 12:48
有点夸张吧, 举不出个具体例子, 说了也没用。
好了, 不想跟你再辩了, 你认为有造轮子的必要, 那就 ...

比如: 我用u盘Win10 PE UEFI 启动 ,然后条件是PE系统里面C盘没有windows系统, BCDedit 便提示打不开当前系统的BCD文件!如果C盘有windows系统,而且这块硬盘是GPT盘那么BCDedit就会打开C盘这块物理硬盘的ESP分区的efi目录...的BCD文件并识别为当前系统BCD ,这就是BCDedit的弊端之一!其他弊端我还没有碰到。当然这个弊端也许是我自身PE出现的环境变量有问题,但是也很大程度上可能是BCDedit的问题,至少现在我还没有发现不出现这类问题的PE
作者: 熄滅的蠟燭    时间: 2020-5-30 23:21
liuzhaoyzz 发表于 2019-11-8 14:33
有些情况bcdedit根本就用不了,打不开,何谈权威?正因为bcdedit打开不靠谱,所以要重复造轮子。       ...

那你有想过为什么bcdedit打不开吗?在完整的硬盘安装的系统里bcdedit显示无法打开启动配置存储只有一种情况:启动分区没有配置好。如果硬盘是MBR分区表,只有使用BIOS模式,而且引导文件存在活动分区下BCD才能被正确挂载。UEFI模式是可以从MBR启动,但是如果使用了UEFI从MBR启动,用bcdedit就会显示“无法打开启动配置存储”。GPT也一样,只有是UEFI模式加EFI系统分区才能正确挂载。我这几天在写自动安装系统的脚本,我的脚本的环境是在系统正常使用的环境下配置好一些参数,然后脚本自动添加PE到BCD里,自动重启进PE进行系统安装。当我在虚拟机里测试的时候就发现了,只要PE的启动模式和系统的模式对应,不论PE是U盘启动还是光盘启动,就能正确挂载硬盘里的BCD,只要PE的启动模式和硬盘里的分区形式不对应,就算是手动挂载BCD到注册表里,bcdedit也显示无法打开启动配置存储。UEFI和BIOS模式都是一样。而且我在我笔记本的硬盘上单独创建了一个FAT32的分区,创建了一个UEFI的引导项指向里面的引导文件,就是在开机按启动热键选择创建的引导项启动进PE,虽然注册表里显示的启动设备是我新建的那个FAT32分区,但是当我用bcdedit命令的时候还是正确挂载了我硬盘EFI系统分区里的BCD
作者: 熄滅的蠟燭    时间: 2020-5-30 23:31
朱玛12345678 发表于 2019-11-8 19:47
XP添加UEFI启动支持其实很简单,只要拷两个文件就可以。这个我早就做到了,只不过一直没公开教程而已。

我敢肯定你的这个肯定不是UEFI启动。
作者: xban    时间: 2020-5-31 00:38
谢谢分享
作者: xhan    时间: 2020-5-31 00:39
谢谢分享
作者: 熄滅的蠟燭    时间: 2020-5-31 11:38
我在你另一个帖子那里下载了你发的蓝奏云链接里的三个程序,我这系统明明是BIOS模式,两个程序检测成了UEFI,一个是未知。我不知道这怎么检测的,我三个硬盘全部都是MBR,BCD里也都是winload.exe,系统信息里也是传统


作者: ku588    时间: 2020-5-31 12:39
本帖最后由 ku588 于 2020-5-31 12:50 编辑

早试过了,受具体实机BIOS-UEFI不同环境的影响和Windows系统PE不同环境因素的影响,这个判断不可靠!
尤其是在即支持传统BIOS又支持UEFI的情况下,有很多不确定性!单一的纯BIOS和单一的纯UEFI下的判断还好些。


作者: 熄滅的蠟燭    时间: 2020-5-31 12:56
ku588 发表于 2020-5-31 12:39
早试过了,受具体实机BIOS-UEFI不同环境的影响和Windows系统PE不同环境因素的影响,这个判断不可靠!
尤其 ...

这只是判断当前系统的启动模式,关PE什么事。同时支持BIOS和UEFI又怎么样,系统还不是只用一种模式启动
作者: ku588    时间: 2020-5-31 13:12
本帖最后由 ku588 于 2020-5-31 13:19 编辑
熄滅的蠟燭 发表于 2020-5-31 12:56
这只是判断当前系统的启动模式,关PE什么事。同时支持BIOS和UEFI又怎么样,系统还不是只用一种模式启动

我管PE环境也叫系统,我在PE下测试不行吗?能判断PE系统启动环境吗?
如果不能判断当前PE系统环境就注明下,只对正常Windows系统有效。

如果以此判断为依据的话,恐怕判断错会引起误导!

作者: 熄滅的蠟燭    时间: 2020-5-31 13:23
ku588 发表于 2020-5-31 13:12
我管PE环境也叫系统,我在PE下测试不行吗?能判断PE系统启动环境吗?
如果不能判断当前PE系统环境就注明 ...

你测试PE的启动模式有个鸟用
作者: ku588    时间: 2020-5-31 13:24
熄滅的蠟燭 发表于 2020-5-31 13:23
你测试PE的启动模式有个鸟用

你觉得没用不等于别人没用,不懂少说话
作者: 熄滅的蠟燭    时间: 2020-5-31 13:29
ku588 发表于 2020-5-31 13:24
你觉得没用不等于别人没用,不懂少说话

那你说说判断PE启动模式有什么用?
作者: 朱玛12345678    时间: 2020-5-31 13:30
熄滅的蠟燭 发表于 2020-5-30 23:31
我敢肯定你的这个肯定不是UEFI启动。

信不信由你
http://bbs.wuyou.net/forum.php?m ... 20307&mobile=no
作者: 熄滅的蠟燭    时间: 2020-5-31 13:41
朱玛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有个毛用?
作者: ku588    时间: 2020-5-31 13:44
熄滅的蠟燭 发表于 2020-5-31 13:29
那你说说判断PE启动模式有什么用?

如果仅仅是判断当前系统是BIOS还是UEFI启动,如果没有其它用武之地,那这个工具就没有价值,比如用于远程系统维护安装系统(PE下安装系统),快速判断客户当前电脑系统使用环境,对应安装相应的系统等。除了上面说的吧,我就是想验证下这个工具在PE系统下是否也能判断正确,接下来我再考虑这个工具对我来说还有没有别的用处,就这一条理由就够了。
作者: 熄滅的蠟燭    时间: 2020-5-31 13:56
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
作者: wintoflash    时间: 2020-5-31 14:09
熄滅的蠟燭 发表于 2020-5-31 13:41
看了你的帖子,你也是真够闲的,我先不管你的是不是UEFI。我就想问问弄这个32位的XP来UEFI启动有意义吗? ...

有没有意义不是由你来定。
错了就是错了,别狡辩。
作者: wondaol    时间: 2020-5-31 14:18
“先运行cmd,切换到DetectEFI32所在的目录,输入DetectEFI32,或者直接用一楼的批处理示例。”

还是有点麻烦,如果能直接打开程序,显示系统BIOS还是UEFI启动 就方便了
作者: 熄滅的蠟燭    时间: 2020-5-31 14:19
wintoflash 发表于 2020-5-31 14:09
有没有意义不是由你来定。
错了就是错了,别狡辩。

我才不管什么错不错,你以为错了就错了呗。反正我就是认为让XP做UEFI没有意义
作者: adef    时间: 2020-5-31 16:22
试试。 test.7z (10.58 KB, 下载次数: 222)
作者: ku588    时间: 2020-5-31 16:48
adef 发表于 2020-5-31 16:22
试试。

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

试过层主以前提供的这两个程序,32位与64位分别使用检测结果准确些,这个附件相比与以前的有更新吧。
作者: 熄滅的蠟燭    时间: 2020-5-31 16:57
adef 发表于 2020-5-31 16:22
试试。

我有个问题。我刚刚在虚拟机下用UEFI测试了一下,硬盘使用MBR分区表,我在虚拟机板块找到一个修改过的ROM,UEFI可以直接读取NTFS分区下的efi启动文件。我直接把UEFI的引导文件放在了原系统所在分区下,可能是因为之前设置了活动分区的原因,进到系统之后bcdedit可以正确读取到BCD,你发的两个工具也可以正确识别到。但是当我把硬盘切换到GPT分区表之后,又和刚才一样,直接把UEFI引导文件放在了系统所在分区下,但是这个时候进到系统之后,bcdedit就读取不到BCD了,当我手动用regedit把BCD挂载到HKLM\BCD00000000之后,bcdedit还是读取不到,但是用BOOTICE可以读取。我想问一下,如果这种情况下,批处理应该怎么编辑BCD
作者: adef    时间: 2020-5-31 17:03
71楼的 test.7z 其实就是 wintoflash 的 secure boot,偶只是修改了一下显示结果。
作者: ku588    时间: 2020-5-31 17:19
adef 发表于 2020-5-31 17:03
71楼的 test.7z 其实就是 wintoflash 的 secure boot,偶只是修改了一下显示结果。

是这样的,好的谢谢;同时感谢 wintoflash大 的 secure boot
作者: ku588    时间: 2020-5-31 23:18
本帖最后由 ku588 于 2020-5-31 23:34 编辑
adef 发表于 2020-5-31 16:22
试试。

经实机测试,BIOS-UEFI兼容模式下,在硬盘版RAMOS下测试,还是这个wintoflash大 的 secure boot修改的判断准确,之前的那两个程序与BootModeCheck都判断为UEFI,实际是Legacy BIOS启动,这个判断为Legacy是正确的。
作者: liuzhaoyzz    时间: 2021-1-13 11:00
adef 发表于 2020-5-31 16:22
试试。

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

作者: 童心学艺    时间: 2021-1-14 09:20
多谢楼主分享。
作者: wintoflash    时间: 2021-11-19 20:36
挖个坟。
最近写了个打印各种系统信息的小工具。
https://github.com/a1ive/nwinfo/releases
使用 nwinfo.exe --sys 可以显示固件类型和安全启动等信息。

使用 nwinfo.exe --help 可以查看帮助。
如果只需要 nwinfo --sys 这一项功能的话,可以只保留exe文件。
作者: liuzhaoyzz    时间: 2021-11-20 11:01
wintoflash 发表于 2021-11-19 20:36
挖个坟。
最近写了个打印各种系统信息的小工具。
https://github.com/a1ive/nwinfo/releases

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

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

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

这个限制不行啊,希望改进,希望能够通杀windows系统,不然的话XP还要分开处理,麻烦啊。
作者: wintoflash    时间: 2021-11-20 11:43
本帖最后由 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加大括号删掉,再编译出来就行了。不过一些功能可能会出问题。
作者: wintoflash    时间: 2021-11-22 15:06
现在nwinfo可以在XP下运行了,但是大部分功能会出错。
判断固件类型是可以的。
作者: liuzhaoyzz    时间: 2021-11-22 15:19
wintoflash 发表于 2021-11-22 15:06
现在nwinfo可以在XP下运行了,但是大部分功能会出错。
判断固件类型是可以的。

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

nwinfo_x86 --sys


      

VXP-2021-11-22-15-14-22.png (35.76 KB, 下载次数: 158)

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

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

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

作者: wintoflash    时间: 2021-11-26 14:35
liuzhaoyzz 发表于 2021-11-22 15:19
试了下,虚拟机里面的xp,判断固件类型没有问题。

nwinfo_x86 --sys

现在在xp下除了不能获取acpi之外,其他的功能都可以使用了。
(感觉没必要再为xp单独实现获取acpi的功能)
作者: 江南一根葱    时间: 2021-11-26 15:03
经65535位网友测试,我的方案可能适合dos~win11系统
作者: liuzhaoyzz    时间: 2021-11-26 15:09
wintoflash 发表于 2021-11-26 14:35
现在在xp下除了不能获取acpi之外,其他的功能都可以使用了。
(感觉没必要再为xp单独实现获取acpi的功能)

xp的ACPI感觉没什么必要。谢谢!        
作者: liuzhaoyzz    时间: 2021-11-26 15:20
本帖最后由 liuzhaoyzz 于 2021-11-26 15:22 编辑
江南一根葱 发表于 2021-11-26 15:03
经65535位网友测试,我的方案可能适合dos~win11系统

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

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

作者: liuzhaoyzz    时间: 2021-11-26 15:52
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,这几个关键词,是批处理需要捕捉的。




作者: wintoflash    时间: 2021-11-26 19:14
liuzhaoyzz 发表于 2021-11-26 15:52
static void PrintFwInfo(void)
{
        DWORD VarSize = 0;

你这不是能看懂C吗。
作者: 江南一根葱    时间: 2021-11-26 20:58
liuzhaoyzz 发表于 2021-11-26 15:20
32位保护模式的程序,怎么可能运行在16位实模式的DOS上面?吹牛不打草稿

DetectEFI32感觉在 ...

正是因为不能运行,所以不影响判断结果
作者: 江南一根葱    时间: 2021-11-26 20:59
liuzhaoyzz 发表于 2021-11-26 15:20
32位保护模式的程序,怎么可能运行在16位实模式的DOS上面?吹牛不打草稿

DetectEFI32感觉在 ...

正是因为不能运行,所以不影响判断结果
作者: 江南一根葱    时间: 2021-11-26 20:59
liuzhaoyzz 发表于 2021-11-26 15:20
32位保护模式的程序,怎么可能运行在16位实模式的DOS上面?吹牛不打草稿

DetectEFI32感觉在 ...

正是因为不能运行,所以不影响判断结果
作者: 江南一根葱    时间: 2021-11-26 20:59
liuzhaoyzz 发表于 2021-11-26 15:20
32位保护模式的程序,怎么可能运行在16位实模式的DOS上面?吹牛不打草稿

DetectEFI32感觉在 ...

正是因为不能运行,所以不影响判断结果
作者: liuzhaoyzz    时间: 2021-11-27 11:46
wintoflash 发表于 2021-11-26 19:14
你这不是能看懂C吗。

无论什么语言,我的水平只能写“Hello world!”
作者: bjay2008xmy    时间: 2021-12-18 15:24
提示: 作者被禁止或删除 内容自动屏蔽
作者: liuzhaoyzz    时间: 2021-12-18 17:52
bjay2008xmy 发表于 2021-12-18 15:24
WIN10 64位用不了,批出理没有显示判断结果,只有一句按任意键继续。。

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

直接用wintoflash的。
作者: 遨游的风    时间: 2023-2-28 16:14
感谢分享
作者: 时尚拼搏    时间: 2023-2-28 20:37
强强强




欢迎光临 无忧启动论坛 (http://bbs.c3.wuyou.net/) Powered by Discuz! X3.3