winver

来自 WinStory Wiki
(重定向自 版本报告小程序
跳转到导航 跳转到搜索
winver
Microsoft Windows 的组件
推出于Windows 3.0

winver 是 Windows 版本(Windows Version)的缩写,是大多数 Microsoft Windows 版本中包含的实用程序,用于获取有关操作系统版本的信息。根据 Windows 版本的不同,此工具在基于 DOS 的 Windows 和 Windows NT 上的文件版本信息中也分别称为 Windows 版本实用程序(Windows-version utility)或版本报告小程序(Version Reporter Applet)。

历史

它最初是在 Windows 3.0 中引入的,在那里它被实现为一个简单的消息框,其中包含 Windows 徽标、主要和次要版本号、版权声明以及有关当前活动操作模式的信息。此工具还包括一个自定义的 MS-DOS 可执行存根,用于将版本信息打印到屏幕上。在整个经典的 Windows 系列中,它几乎没有变化,Windows 3.1 只更改了徽标,而 Windows 95 将版本信息简化到操作系统名称。

在基于 NT 的 Windows 版本中,该工具自 Windows NT 3.1 起便被纳入系统,其实现方式与16位版本类似——仅以一个简易窗口呈现,显示 Windows 徽标、版本号、构建号及版权声明。然而从 Windows NT 3.5 开始,该工具仅显示外壳关于框,除版本号和版权声明外,还包含计算机信息、注册所有者及可用内存容量等内容。

实现

Windows NT 3.5 及更高版本

在不包含独立 winver.exe 可执行文件的 Windows 版本(如 Windows Server Core 或 Windows 预安装环境)上,可以使用 rundll32 shell32,ShellAbout 命令调用此对话框。但是,当以这种方式调用时,对话框将不包含时间炸弹信息,原因在于此功能是小程序独有的。以这种方式调用时,对话框标题将显示乱码,这是因为 rundll32 预期的参数与函数的实际签名之间存在差异。[a]

Windows 2000

在开发Windows 2000期间引入时间炸弹机制后,winver被更新为可查询定时炸弹相关信息,若存在该机制,则会在关于框中显示其状态。

Windows 8

为防止进一步泄露并追踪泄露版本的安装情况,该小程序还添加了红色文字提示,说明未经授权用户使用该版本可能导致法律责任,并可能引发刑事诉讼等不可预见的后果。在 Windows 8.1 开发阶段,这些提示信息仍以临时形式存在,但后来被移除,自 Windows 指纹识别服务重新构建后便再未出现。

Windows 10 和 11

Windows 10 起,该小程序收到了渐进式的更新,通过引入注册表键来定义当前版本,这些版本会显示在“Version”标签之后。2020 年,为了区分开发版和与发布相关的 Windows 版本,引入了一个新的“Dev”版本,该版本随后暂时消失,并自 Windows 11 Dilithium 版本起重新出现,在 build 28000 之前一直沿用该版本。

图库

经典 Windows,也称早期 Windows

Windows NT

  1. rundll32 期望被调用函数具有 void CALLBACK EntryPoint (HWND hWnd, HINSTANCE hInst, LPSTR lpszCmdLine, int nCmdShow) 的签名。标题栏中的乱码应用程序名称(MZ 或 mojibake,具体取决于使用的是 API 的 -A 还是 -W 变体)是 ShellAbout 尝试将 shell32.dll 的可执行标头分析为零终止字符串字符串的结果。这是由第二个参数不匹配引起的,其中 ShellAbout 需要指向字符串的指针,而 rundll32 提供 DLL 的 HINSTANCE,在 Win32 中是指向内存中加载模块的指针。