无忧启动论坛

标题: 判断efi或者legacy启动模式 (已解决) [打印本页]

作者: 窄口牛    时间: 2024-11-20 09:02
标题: 判断efi或者legacy启动模式 (已解决)
本帖最后由 窄口牛 于 2024-11-26 08:44 编辑







REG Query HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\MultifunctionAdapter /f RealModeIrqRoutingTable /s >nul
IF %ERRORLEVEL% == 0 echo WinXP has been booted with ntldr
IF %ERRORLEVEL% == 1 echo WinXP has been booted with winload.efi orwinload.exe

已证实用bootmgr启动也会有这个注册表项










作者: 2012win98se    时间: 2024-11-20 10:39
本帖最后由 2012win98se 于 2024-11-25 08:20 编辑

这个玩意应该是外网某个叫Beta12的人搞的,他现在的最新版脚本如下(改用VBS了):
  1. Const HKEY_LOCAL_MACHINE = &H80000002
  2. strComputer = "." ' Use . for current machine
  3. hDefKey     = HKEY_LOCAL_MACHINE
  4. strKeyPath  = "HARDWARE\DESCRIPTION\System\MultifunctionAdapter\"
  5. Set oReg    = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv")
  6. oReg.EnumKey hDefKey, strKeyPath, arrSubKeys

  7. For Each s In arrSubKeys

  8.         If oReg.EnumKey(hDefKey, strKeyPath & s & "\RealModeIrqRoutingTable", arrSubKeys) = 0 Then
  9.                 x = 1
  10.         End If

  11. Next

  12. If x = 1 Then
  13.         Call MsgBox("The RealModeIrqRoutingTable is present" & vbcrlf & "WinXP has been booted with ntldr",options,"Boot mode check")
  14. Else
  15.         Call MsgBox("No presence of the RealModeIrqRoutingTable" & vbcrlf & "WinXP has been booted with winload.efi or winload.exe",options,"Boot mode check")
  16. End If
复制代码

作者: 窄口牛    时间: 2024-11-20 11:01
执行报错,加上跳过错误语句可以执行,但判断并不对。
legacy.rar (2.68 KB, 下载次数: 12)
附上它所读的这个注册表。



作者: 2012win98se    时间: 2024-11-20 12:38
窄口牛 发表于 2024-11-20 11:01
执行报错,加上跳过错误语句可以执行,但判断并不对。

附上它所读的这个注册表。

报错的是第10行对吗?这一行正好就是检测是否有“RealModeIrqRoutingTable”文件夹,如果有就判定XP从ntldr启动,如果没有就判定XP从winload.efi/winload.exe启动

你附上的注册表我也看过了,legacy.reg里有“RealModeIrqRoutingTable”文件夹,判定XP从ntldr启动;efi.reg里没有“RealModeIrqRoutingTable”文件夹,判定XP从winload.efi启动(排除winload.exe是因为只有Legacy启动模式才会使用,反之,EFI启动模式只会使用winload.efi)
作者: 窄口牛    时间: 2024-11-20 13:00
2012win98se 发表于 2024-11-20 12:38
报错的是第10行对吗?这一行正好就是检测是否有“RealModeIrqRoutingTable”文件夹,如果有就判定XP从ntl ...

好的,原理我理解了。


作者: 2012win98se    时间: 2024-11-25 09:49
窄口牛 发表于 2024-11-20 13:00
好的,原理我理解了。

论坛系统居然把我的几个“\”弄没了难怪你的报错跟我的不一样,现在已修正

不过奇怪的是,在Windows XP x86 SP3上运行会出现第10行的错误(提示“Memory is locked”,意即“内存已锁定”),在Windows XP x64 SP2上运行就正常
作者: 窄口牛    时间: 2024-11-25 13:58
我在86w2k3,和64w2k3,都没问题。这就变得不是检测efi或者legacy了。
作者: 窄口牛    时间: 2024-11-26 08:40
本帖最后由 窄口牛 于 2024-11-26 08:44 编辑

是的,在xp下却是是酱紫的报错。并且批处理也报错,命令行参数过多。


作者: 孟仁飞    时间: 2024-11-26 15:34
学习
作者: toptop    时间: 2024-11-28 10:41
学习了!!!!
作者: wintoflash    时间: 2024-11-29 15:54
mark 一下
作者: 阿小土    时间: 2024-12-6 22:26

作者: Google2023    时间: 2024-12-18 08:05
你好,请分享下这个系统,谢谢




欢迎光临 无忧启动论坛 (http://bbs.c3.wuyou.net/) Powered by Discuz! X3.3