无忧启动论坛

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

[已解决] 如何判断PE是以UEFI还是BIOS方式启动

[复制链接]
跳转到指定楼层
1#
发表于 2016-5-3 21:48:20 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 thtf 于 2016-5-17 20:28 编辑

在PE下运行一个程序,想判断当前PE是以哪种方式启动的,注意是用U盘或移动硬盘启动的支持BIOS和UEFI双启动的PE启动的系统,就想判断当前启动的PE的启动方式。
1、论坛里有用bcdedit /enum {cerrent} 这个方法不行,它检测的应该是硬盘上的,我以UEFI启动PE后,运行显示错误(当时硬盘模式为MBR),如果GPT我想就可以了。
2、用msinfo32查看,没用过,PE里运行不来,也不适合自动处理。
3、识别最准的是P大的bootice,如果当前PE是以UEFI启动的,就会出现UEFI选项,反之则没有。

肯请各位老大百忙之中回答一下,或提供个思路,谢谢了!

按2楼大师的提示,已经成功了。
运行完wpeutil /UpdateBootInfo    就可以查询注册表了。
2#
发表于 2016-5-3 21:56:15 | 只看该作者

点评

15楼提供程序下载  发表于 2016-8-20 02:05
这个在精简版的pe下可能不行,不知道bootice用的是哪个API?  详情 回复 发表于 2016-5-4 01:10
谢谢大元帅回答,正在研究,先谢谢。  详情 回复 发表于 2016-5-3 21:59
谢谢大元帅回答,正在研究,先谢谢。  详情 回复 发表于 2016-5-3 21:59
谢谢大元帅回答,正在研究,先谢谢。  详情 回复 发表于 2016-5-3 21:59
回复

使用道具 举报

3#
 楼主| 发表于 2016-5-3 21:59:33 | 只看该作者
ljycslg 发表于 2016-5-3 21:56
https://msdn.microsoft.com/zh-cn/library/windows/hardware/dn293283.aspx

谢谢大元帅回答,正在研究,先谢谢。
回复

使用道具 举报

4#
 楼主| 发表于 2016-5-3 21:59:39 | 只看该作者
ljycslg 发表于 2016-5-3 21:56
https://msdn.microsoft.com/zh-cn/library/windows/hardware/dn293283.aspx

谢谢大元帅回答,正在研究,先谢谢。
回复

使用道具 举报

5#
 楼主| 发表于 2016-5-3 21:59:50 | 只看该作者
ljycslg 发表于 2016-5-3 21:56
https://msdn.microsoft.com/zh-cn/library/windows/hardware/dn293283.aspx

谢谢大元帅回答,正在研究,先谢谢。
回复

使用道具 举报

6#
发表于 2016-5-3 23:12:58 | 只看该作者
这东西不是默认uefi吗。出发自己设置bios吗。
回复

使用道具 举报

7#
发表于 2016-5-4 01:10:24 来自手机 | 只看该作者
ljycslg 发表于 2016-5-3 21:56
https://msdn.microsoft.com/zh-cn/library/windows/hardware/dn293283.aspx

这个在精简版的pe下可能不行,不知道bootice用的是哪个API?
回复

使用道具 举报

8#
发表于 2016-5-4 06:19:24 | 只看该作者
Bootice就可以了
回复

使用道具 举报

9#
发表于 2016-5-4 07:06:30 | 只看该作者
谢谢分享
回复

使用道具 举报

10#
发表于 2016-5-7 02:45:19 | 只看该作者
本论坛WINLY启动能智能分析硬件是bios还是EFI启动调用相应的启动项。
回复

使用道具 举报

11#
发表于 2016-5-7 05:27:03 | 只看该作者
GetFirmwareType function

Retrieves the firmware type of the local computer.

Syntax

BOOL WINAPI GetFirmwareType(
  _Inout_ PFIRMWARE_TYPE FirmwareType
);

Parameters
FirmwareType [in, out]
A pointer to a FIRMWARE_TYPE enumeration.

Return value

If the function succeeds, the return value is nonzero.

If the function fails, the return value is zero. To get extended error information, call the GetLastError function.

Requirements
Minimum supported client           Windows 8 [desktop apps only]
Minimum supported server          Windows Server 2012 [desktop apps only]
Header                                     Winbase.h (include Windows.h)
Library                                      Kernel32.lib
DLL                                           Kernel32.dll

typedef enum _FIRMWARE_TYPE {
  FirmwareTypeUnknown  = 0,
  FirmwareTypeBios     = 1,
  FirmwareTypeUefi     = 2,
  FirmwareTypeMax      = 3
} FIRMWARE_TYPE, *PFIRMWARE_TYPE;

评分

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

查看全部评分

回复

使用道具 举报

12#
发表于 2016-5-7 05:40:39 | 只看该作者
For Windows 7/Server 2008R2 and above, the GetFirmwareEnvironmentVariable Win32 API (designed to extract firmware environment variables) can be used.  This API is not supported on non-UEFI firmware and will fail in a predictable way when called - this will identify a legacy BIOS.  On UEFI firmware, the API can be called with dummy parameters, and while it will still fail (probably!) the resulting error code will be different from the legacy BIOS case.

For Windows 8/Server 2012 and above there's a more elegant solution in the form of the GetFirmwareType() API.  This returns an enum (integer) indicating the underlying firmware type.
回复

使用道具 举报

13#
发表于 2016-5-11 21:54:14 | 只看该作者
发现上次的批处理有问题,重新上传

check_pe_boot_mode.7z

371 Bytes, 下载次数: 85, 下载积分: 无忧币 -2

回复

使用道具 举报

14#
发表于 2016-8-19 23:42:11 | 只看该作者
正有此问,解决了难题
回复

使用道具 举报

15#
发表于 2016-8-20 02:04:47 | 只看该作者
本帖最后由 baosheng00 于 2016-8-22 00:13 编辑

给楼主一个程序吧,UEIF启动没有测试,手头没有这机器。程序20秒没有点击确定按钮自动退出,需要PE才可以运行噢!
看图吧,我测试三个PE











下载2.0的版本(支持2000~win10PE)

MBRUEFI.rar

366 KB, 下载次数: 105, 下载积分: 无忧币 -2

回复

使用道具 举报

16#
发表于 2016-8-21 20:52:04 | 只看该作者
这是什么情况?

点评

2.0所有系统都支持  详情 回复 发表于 2016-8-22 00:05
win7pe,没有加。只支持xp,03win8,win10PE。其它都显示无法识别  详情 回复 发表于 2016-8-21 21:58
回复

使用道具 举报

17#
发表于 2016-8-21 21:58:20 | 只看该作者
本帖最后由 baosheng00 于 2016-8-21 22:01 编辑


手头上没有,win7pe,所以没有加支持。只支持xp,03,win8,win10PE。其它都显示无法识别。
win7 pe都是BIOS启动。

需要我再调整

点评

哈哈,我这个PE比较特殊,不是普通的,我这是写入硬盘,代替系统,每天包括现在都在用的,你的软件可能判断可能会有难度。  发表于 2016-8-21 22:07
回复

使用道具 举报

18#
发表于 2016-8-22 00:05:05 | 只看该作者
本帖最后由 baosheng00 于 2016-8-22 00:12 编辑


2.0版本所有PE系统都支持(只要程序可运行)
回复

使用道具 举报

19#
发表于 2016-8-25 06:57:30 | 只看该作者
UEFI加载的BCD与BIOS加载的BCD不是同一个文件,一个加个U,一个加个B启动时就能区分了,另外在PE里运行DISM++就能看到了。
回复

使用道具 举报

20#
发表于 2016-8-25 15:47:25 | 只看该作者
api即可
回复

使用道具 举报

21#
发表于 2020-3-2 19:20:49 | 只看该作者
回复

使用道具 举报

22#
发表于 2020-3-2 22:12:35 | 只看该作者
好久没更新PE了,学习中!!!
回复

使用道具 举报

23#
发表于 2020-10-10 19:14:32 | 只看该作者
试试看,好久没找到这个文件
回复

使用道具 举报

24#
发表于 2023-1-31 09:53:55 | 只看该作者
感谢分享,最近想用AU3写一个,还没有找到头绪,学习学习。
回复

使用道具 举报

25#
发表于 2023-1-31 10:19:18 | 只看该作者
前面写的有uefi
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-4-27 08:28

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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