|
本帖最后由 dos时代菜鸟 于 2021-6-18 12:30 编辑
问题已经解决,
感谢 liuzhaoyzz 、窄口牛 、adef 、liuzhaoyzz 等诸位大侠的热心回复和提供的思路。
我想弄个 cmd 实现这个功能,进而判断 系统启动类型是 uefi 还是 leagy-bios
鉴于 2021新版win10 已经不能使用以往 call dll函数 的方式,
针对新版win10 改进了一下,用了另一个 api
bootmode-2021.06.18.7z
(1.82 MB, 下载次数: 97)
- ENVI$# &ret=*4 0 //申请4个窄字符空间,也可以用 ENVI$ &ret=*2 0 //申请2个宽字符空间
- CALL $--qd --bool --ret:&&r Kernel32.dll,GetFirmwareType,*&ret
- FIND $%&&r%=,
- {*
- //为空,可以认为没有返回数据,当前环境不支持此API,低于Win8版本的系统
- //MESS. 不支持此API。
- CALL $ --ret:r Kernel32.dll,GetFirmwareEnvironmentVariableW,"",{00000000-0000-0000-0000-000000000000},0,0
- CALL $ --ret:mode1 Kernel32.dll,GetLastError, ""
- IFEX $%mode1% = 1 ,envi BootMODE=BIOS! find $%mode1%=998 ,envi BootMODE=UEFI ! envi BootMODE=???1
- }!
- {*
- IFEX #%&&r%=0,MESS API Error.!
- {*
- ENVI?int &ret=&ret1
- IFEX #%&ret1%=0,envi BootMODE=???0。
- IFEX #%&ret1%=1,envi BootMODE=BIOS
- IFEX #%&ret1%=2,envi BootMODE=UEFI
- IFEX #%&ret1%=3,envi BootMODE=???9
- }
- }
- mess %Bootmode%
复制代码
2021新版 pecmd 也有所改进,
改进后 的 如下:2021.01.14
bootmode.2021.2.7z
(1.67 MB, 下载次数: 160)
PE下 用pecmd 脚本
bootmode.7z
(1.82 MB, 下载次数: 258)
压缩包中包含 pecmd x86 /x64 所以在 本地 windows下也可以用。
有的 PE 因为 pecmd 版本不同 有的 call 指令略有不同,需要 自行对 bm.ini 进行修改。压缩包中的 pecmd 是 2018新版
脚本解决方案 是 调用 pecmd 加载 kernel32.dll 的 api 句柄
按照网上流行的做法 ,本质就是 通过 给 GetFirmwareEnvironmentVariableW 函数一个 错误的信息,其返回值必为0 ,但是其 错误代码返回值就不一样了。如果错误代码返回 1 说明是 bios ,代表 当前系统不支持 该函数运行,如果 错误代码返回值为 998 ,说明 该句柄运行了,但是运行错误。
值得一提的是,必须 将 kernel32.dll 的 GetFirmwareEnvironmentVariableW 和 getLastError 两个函数 紧连着使用,以便能够获取 真正的错误返回码。
所以 考虑 用 team 命令将两个 call 链接起来。
pecmd 脚本内容如下:
(根据自身 pecmd 版本 需要将下面源码中 红色部分修改 比如 2017版 pecmd 需要把 ** 变成 --)
--------------
- TEAM CALL $ --ret:mode1 Kernel32.dll,GetFirmwareEnvironmentVariableW, "",{00000000-0000-0000-0000-000000000000},0,0 | CALL $ --ret:mode1 Kernel32.dll,GetLastError, ""
- IFEX $%mode1% = 1 ,ENVI MODE1=BIOS! find $%mode1%=998 ,ENVI MODE1=UEFI ! ENVI MODE1=Unknow
- MESS %mode1%
复制代码 ----------------------
exe 方案 用这个
detectefi.7z
(22.24 KB, 下载次数: 143)
由 adef 提供,很好用。
如果是 win10 系统 powershell 3.0 的话 可以尝试用这个
bmx.7z
(576 Bytes, 下载次数: 84)
如果你的系统 可以运行 bcdedit 列出 bcd 内容,可以用这个
B2.7z
(896 Bytes, 下载次数: 104)
|
评分
-
查看全部评分
|