无忧启动论坛

 找回密码
 注册
搜索

判断efi或者legacy启动模式 (已解决)

查看数: 3221 | 评论数: 13 | 收藏 1
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2024-11-20 09:02

正文摘要:

本帖最后由 窄口牛 于 2024-11-26 08:44 编辑 REG Query HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\MultifunctionAdapter /f RealModeIrqRoutingTable /s >nul IF %ERRORLEVEL% == 0 echo ...

回复

leitian72853 发表于 2025-4-8 10:34:14
谢谢分享
Google2023 发表于 2024-12-18 08:05:07
你好,请分享下这个系统,谢谢
阿小土 发表于 2024-12-6 22:26:19
wintoflash 发表于 2024-11-29 15:54:27
mark 一下
toptop 发表于 2024-11-28 10:41:25
学习了!!!!
孟仁飞 发表于 2024-11-26 15:34:41
学习
窄口牛 发表于 2024-11-26 08:40:40
本帖最后由 窄口牛 于 2024-11-26 08:44 编辑

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

窄口牛 发表于 2024-11-25 13:58:57
我在86w2k3,和64w2k3,都没问题。这就变得不是检测efi或者legacy了。
2012win98se 发表于 2024-11-25 09:49:37
窄口牛 发表于 2024-11-20 13:00
好的,原理我理解了。

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

不过奇怪的是,在Windows XP x86 SP3上运行会出现第10行的错误(提示“Memory is locked”,意即“内存已锁定”),在Windows XP x64 SP2上运行就正常
2012win98se 发表于 2024-11-20 12:38:47
窄口牛 发表于 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 11:01:21
执行报错,加上跳过错误语句可以执行,但判断并不对。
legacy.rar (2.68 KB, 下载次数: 14)
附上它所读的这个注册表。


2012win98se 发表于 2024-11-20 10:39:36
本帖最后由 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
复制代码

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

闽公网安备 35020302032614号

GMT+8, 2025-6-17 04:20

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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