无忧启动论坛

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

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

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

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

点评

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

使用道具 举报

2#
发表于 2021-11-19 20:36:42 | 显示全部楼层
挖个坟。
最近写了个打印各种系统信息的小工具。
https://github.com/a1ive/nwinfo/releases
使用 nwinfo.exe --sys 可以显示固件类型和安全启动等信息。

使用 nwinfo.exe --help 可以查看帮助。
如果只需要 nwinfo --sys 这一项功能的话,可以只保留exe文件。

点评

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

使用道具 举报

3#
发表于 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
回复

使用道具 举报

4#
发表于 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加大括号删掉,再编译出来就行了。不过一些功能可能会出问题。
回复

使用道具 举报

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

点评

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

使用道具 举报

6#
发表于 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
回复

使用道具 举报

7#
发表于 2021-11-26 19:14:16 | 显示全部楼层
liuzhaoyzz 发表于 2021-11-26 15:52
static void PrintFwInfo(void)
{
        DWORD VarSize = 0;

你这不是能看懂C吗。

点评

无论什么语言,我的水平只能写“Hello world!”  详情 回复 发表于 2021-11-27 11:46
回复

使用道具 举报

8#
发表于 2023-4-17 22:10:56 | 显示全部楼层
挖坟备忘
反编译 bcdedit.exe,可以看出它是通过 NtQuerySystemInformation 获取未公开结构体 SYSTEM_BOOT_ENVIRONMENT_INFORMATION 来判断 BIOS/UEFI 的。
(SYSTEM_INFORMATION_CLASS)90 = 0x5A = SystemBootEnvironmentInformation
  1. __int64 SiGetFirmwareType()
  2. {
  3.   unsigned int v0; // ebx
  4.   char SystemInformation[16]; // [rsp+20h] [rbp-38h] BYREF
  5.   unsigned int v3; // [rsp+30h] [rbp-28h]

  6.   v0 = 1;
  7.   if ( NtQuerySystemInformation((SYSTEM_INFORMATION_CLASS)90, SystemInformation, 0x20u, 0i64) >= 0 )
  8.   {
  9.     v0 = 0;
  10.     if ( (int)v3 < 3 )
  11.       return v3;
  12.   }
  13.   return v0;
  14. }
复制代码

https://www.geoffchappell.com/st ... ent_information.htm

EFIGuard 也用了这个方法,看来应该更靠谱。
回复

使用道具 举报

9#
发表于 2023-4-17 22:17:10 | 显示全部楼层
另外关于这个帖子 请问下有没有命令行工具添加UEFI引导序列?
记得有人说过用 bootice 不能修改 UEFI 启动项。
我在某些环境下重现了这个问题,就是用 API SetFirmwareEnvironmentVariable 设置 UEFI 变量失败。
但是诡异的是,执行一次 bcdedit /enum FIRMWARE 之后就正常了。
反编译 bcdedit 可知,它根本不用微软公开的这个 API,而是用了未公开的 ZwQueryBootOptions 和 ZwSetBootOptions 。

点评

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

使用道具 举报

10#
发表于 2023-4-21 12:59:33 | 显示全部楼层
本帖最后由 wintoflash 于 2023-4-21 13:04 编辑
dos时代菜鸟 发表于 2023-4-21 11:21
bcedit 获取bcd启动信息,是通过系统api定位启动分区,找bcd的,有的系统启动环境复杂,bcdedit就不一定好 ...

mountvol 判断启动模式,和我上面说的方法一样。
  1. __int64 IsEfi()
  2. {
  3.   unsigned int v0; // ebx
  4.   SYSTEM_BOOT_ENVIRONMENT_INFORMATION SystemInformation; // [rsp+20h] [rbp-38h] BYREF

  5.   v0 = 0;
  6.   memset(&SystemInformation, 0, sizeof(SystemInformation));
  7.   if ( NtQuerySystemInformation((SYSTEM_INFORMATION_CLASS)90, &SystemInformation, 0x20u, 0i64) >= 0 )
  8.     return SystemInformation.FirmwareType == 2;
  9.   return v0;
  10. }
复制代码

回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-5-15 19:53

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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