winver
Microsoft Windows 的组件 | |
![]() Windows 11 2024 年更新中的 winver | |
推出于 | 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 以来一直包含在内,在 Windows NT 3.1 中,它的实现方式类似于其 16 位对应物,作为包括 Windows 徽标、版本和内部版本号以及版权声明的简单框。但是,从 Windows NT 3.5 开始,它仅调用 ShellAbout
API 函数来显示一个标准的关于框,除了版本和版权声明外,它还包含有关计算机和注册所有者的信息。随着在 Windows 2000 开发过程中引入了时间炸弹,winver 更新为查询有关时间炸弹的信息,如果存在,则将其显示在“关于”框中。
在不包含独立 winver.exe
可执行文件的 Windows 版本(如 Windows Server Core 或 Windows 预安装环境)上,可以使用 rundll32 shell32,ShellAbout
命令调用此对话框。但是,当以这种方式调用时,对话框将不包含时间炸弹信息,原因在于此功能是小程序独有的。以这种方式调用时,对话框标题将显示乱码,这是因为 rundll32
预期的参数与函数的实际签名之间存在差异。[a]
图库
经典 Windows,也称早期 Windows
-
Windows for Workgroups 3.11 (from DOS)
Windows NT
注
- ↑
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 中是指向内存中加载模块的指针。