令狐大虾 发表于 2025-9-25 19:35:16

请问大家有什么办法在PE下离线获取Win11的版本信息?

例如挂载注册表配置文件,但是11的注册表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion下ProductName和win10的是一样的,如何才能做到像某些软件读取后直接显示出来“Windows 10 Enterprise”字样呢?

redapple2008 发表于 2025-9-26 08:29:07

方法一:查询离线系统注册表
这是最推荐的方法,因为系统的所有版本信息都权威地存储在注册表中。
​加载离线注册表配置单元​:
在 PE 中打开 ​注册表编辑器​ (regedit)。
选中 HKEY_LOCAL_MACHINE项。
点击顶部菜单的 ​文件 > 加载配置单元。
在弹出的文件浏览器中,导航到你的 ​离线系统盘​(例如 C:\`),然后进入Windows\system32\config` 文件夹。这个文件夹包含了系统的注册表文件。
选择名为 ​SOFTWARE​ 的文件(没有后缀名),然后点击“打开”。
系统会提示你输入一个“项名称”,你可以任意命名,例如 ​Offline_Sys。这相当于为离线系统的注册表创建一个挂载点。
​查询版本信息​:
现在,在 HKEY_LOCAL_MACHINE下会多出一个你刚命名的项(例如 Offline_Sys)。
依次展开该目录:Offline_Sys\Microsoft\Windows NT\CurrentVersion。
在右侧窗口中,查看以下关键键值即可获取详细信息:
​ProductName: 系统版本(如 “Windows 11 专业版”)。
​CurrentBuild: 系统内部版本号(如 “22621”)。
​DisplayVersion: 系统显示版本(如 “23H2”)。
​ReleaseId: 发行ID。
​卸载配置单元​:
查询完成后,回到注册表编辑器,选中你创建的 Offline_Sys项。
再次点击 ​文件 > 卸载配置单元,以避免对注册表造成任何影响。

redapple2008 发表于 2025-9-26 08:29:29

方法二:查看系统文件属性
如果加载注册表遇到问题,这是一种备选方案。

在 PE 中进入离线系统的系统目录,通常是 C:\Windows\System32。

找到一个系统核心文件,例如 ​kernel32.dll、shell32.dll​ 或 ​ntoskrnl.exe。

右键点击该文件,选择 ​属性,然后切换到 ​​“详细信息”​​ 标签页。

在“文件版本”或“产品版本”等字段中,通常会包含系统的版本和构建信息

令狐大虾 发表于 2025-9-26 11:45:20

坛子里面找到个代码
$aDllCallReturn = DllCall("winbrand.dll","wstr","BrandingFormatString","wstr","%WINDOWS_LONG%")
If @error Then
   Switch @error
      Case 1
         MsgBox(0,"DllCall Code Generator","DllCall错误(winbrand.dll/BrandingFormatString): 不能使用DLL文件,可能使用参数有问题。")
      Case 2
         MsgBox(0,"DllCall Code Generator","DllCall错误(winbrand.dll/BrandingFormatString): 未知的返回值类型.")
      Case 3
         MsgBox(0,"DllCall Code Generator","DllCall错误(winbrand.dll/BrandingFormatString): 函数未包含在DLL文件中。函数名称是区分大小写的哦!")
      Case 4
         MsgBox(0,"DllCall Code Generator","DllCall错误(winbrand.dll/BrandingFormatString): 参数数量错误!")
      Case 5
         MsgBox(0,"DllCall Code Generator","DllCall错误(winbrand.dll/BrandingFormatString): 错误的参数!")
      Case Else
         MsgBox(0,"DllCall Code Generator","DllCall错误(winbrand.dll/BrandingFormatString): 未知/不可预期的错误!")
   EndSwitch
   $vDllCallReturn = ""
Else
MsgBox(0,"","当前系统: " & $aDllCallReturn)
EndIf不过它只是判断当前系统的

令狐大虾 发表于 2025-9-26 23:15:36

redapple2008 发表于 2025-9-26 08:29
方法一:查询离线系统注册表
这是最推荐的方法,因为系统的所有版本信息都权威地存储在注册表中。
​加载 ...

帖子里面说过ProductName显示的是“Windows 10 Enterprise ”!这是Win11最纳闷的地方,不然我也不发帖求助了

zhang_jf 发表于 3 天前

不懂就问,,PE的下不是还没有安装系统进去吗,是想要PE的系统版本?
页: [1]
查看完整版本: 请问大家有什么办法在PE下离线获取Win11的版本信息?