wintoflash 发表于 2021-11-26 19:14:16

liuzhaoyzz 发表于 2021-11-26 15:52
static void PrintFwInfo(void)
{
        DWORD VarSize = 0;


你这不是能看懂C吗。

江南一根葱 发表于 2021-11-26 20:58:52

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

DetectEFI32感觉在 ...

正是因为不能运行,所以不影响判断结果

江南一根葱 发表于 2021-11-26 20:59:05

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

DetectEFI32感觉在 ...

正是因为不能运行,所以不影响判断结果

江南一根葱 发表于 2021-11-26 20:59:24

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

DetectEFI32感觉在 ...

正是因为不能运行,所以不影响判断结果

江南一根葱 发表于 2021-11-26 20:59:59

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

DetectEFI32感觉在 ...

正是因为不能运行,所以不影响判断结果

liuzhaoyzz 发表于 2021-11-27 11:46:04

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

无论什么语言,我的水平只能写“Hello world!”{:1_186:}

bjay2008xmy 发表于 2021-12-18 15:24:50

liuzhaoyzz 发表于 2021-12-18 17:52:08

bjay2008xmy 发表于 2021-12-18 15:24
WIN10 64位用不了,批出理没有显示判断结果,只有一句按任意键继续。。

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

直接用wintoflash的。

遨游的风 发表于 2023-2-28 16:14:42

感谢分享

时尚拼搏 发表于 2023-2-28 20:37:41

强强强

lizhimin6618 发表于 2023-3-1 18:22:31


谢谢分享!

yiwan 发表于 2023-3-1 19:54:54

very good

yjkl 发表于 2023-3-4 08:52:25

谢谢分享

277 发表于 2023-3-5 07:01:48

顶顶顶,这个太好了

yyz2191958 发表于 2023-3-5 08:26:03

谢谢分享

temp2005 发表于 2023-3-5 08:31:43

这个直观方便

yjkl 发表于 2023-3-5 21:45:50

学习学习

Hello学习 发表于 2023-3-6 06:02:37

学习

277 发表于 2023-3-6 07:01:56

不错

tkw 发表于 2023-3-12 23:49:48

很有用的东西

wuhuayu 发表于 2023-3-16 01:27:26

大佬能写个cmd选择文件夹或文件 小程序吗

liuzhaoyzz 发表于 2023-3-16 11:50:35

wuhuayu 发表于 2023-3-16 01:27
大佬能写个cmd选择文件夹或文件 小程序吗

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

时尚拼搏 发表于 2023-3-16 18:10:35

谢谢分享

wintoflash 发表于 2023-4-17 22:10:56

挖坟备忘
反编译 bcdedit.exe,可以看出它是通过 NtQuerySystemInformation 获取未公开结构体 SYSTEM_BOOT_ENVIRONMENT_INFORMATION 来判断 BIOS/UEFI 的。
(SYSTEM_INFORMATION_CLASS)90 = 0x5A = SystemBootEnvironmentInformation
__int64 SiGetFirmwareType()
{
unsigned int v0; // ebx
char SystemInformation; // BYREF
unsigned int v3; //

v0 = 1;
if ( NtQuerySystemInformation((SYSTEM_INFORMATION_CLASS)90, SystemInformation, 0x20u, 0i64) >= 0 )
{
    v0 = 0;
    if ( (int)v3 < 3 )
      return v3;
}
return v0;
}
https://www.geoffchappell.com/studies/windows/km/ntoskrnl/inc/api/ntexapi/system_boot_environment_information.htm

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

wintoflash 发表于 2023-4-17 22:17:10

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

liuzhaoyzz 发表于 2023-4-18 17:49:07

wintoflash 发表于 2023-4-17 22:17
另外关于这个帖子 请问下有没有命令行工具添加UEFI引导序列?
记得有人说过用 bootice 不能修改 UEFI 启动 ...

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

hopehu 发表于 2023-4-19 11:05:53

支持一下

zglong8888 发表于 2023-4-20 13:01:31

:curse:

dos时代菜鸟 发表于 2023-4-21 11:21:38

本帖最后由 dos时代菜鸟 于 2023-4-21 11:28 编辑

bcedit 获取bcd启动信息,是通过系统api定位启动分区,找bcd的,有的系统启动环境复杂,bcdedit就不一定好用,有的,bcd中没有指明启动文件winload.efi位置,系统也能启动。有时用grub调用 其他分区上 甚至虚拟盘上的bootmgr 启动系统的,bcdedit可能会把bcd定位到grub所在分区或找不到bootmgr分区,进而找不到bcd。情况太多了。

所以,需要用单独的程序调用系统api检测启动模式。

另外,可以试试 Mountvol。

wintoflash 发表于 2023-4-21 12:59:33

本帖最后由 wintoflash 于 2023-4-21 13:04 编辑

dos时代菜鸟 发表于 2023-4-21 11:21
bcedit 获取bcd启动信息,是通过系统api定位启动分区,找bcd的,有的系统启动环境复杂,bcdedit就不一定好 ...
mountvol 判断启动模式,和我上面说的方法一样。
__int64 IsEfi()
{
unsigned int v0; // ebx
SYSTEM_BOOT_ENVIRONMENT_INFORMATION SystemInformation; // BYREF

v0 = 0;
memset(&SystemInformation, 0, sizeof(SystemInformation));
if ( NtQuerySystemInformation((SYSTEM_INFORMATION_CLASS)90, &SystemInformation, 0x20u, 0i64) >= 0 )
    return SystemInformation.FirmwareType == 2;
return v0;
}
页: 1 2 3 [4] 5
查看完整版本: 分享个判断当前系统是BIOS还是UEFI启动的小程序