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;
}