如何使用 C++ 在 Windows 上检索分页文件大小的“最小允许”/“推荐”/“当前分配”值?

Posted

技术标签:

【中文标题】如何使用 C++ 在 Windows 上检索分页文件大小的“最小允许”/“推荐”/“当前分配”值?【英文标题】:How can I retrieve the "Minimum allowed"/"Recommended"/"Currently allocated" values of paging file size on Windows using C++? 【发布时间】:2010-10-25 20:55:26 【问题描述】:

Windows XP/Vista/7

    系统属性 高级选项卡 性能下的设置...按钮 高级选项卡 更改...按钮 该窗口底部“所有驱动器的总页面文件大小”部分中的数字

有人知道我将如何从 C++ 程序中获取这三个数字吗?

谢谢!

【问题讨论】:

【参考方案1】:

您可以使用 WMI 完成其中的一些操作,您想要的类是 Win32_PageFileSetting。在 .Net 中,这(更容易)通过 System.Management 访问。如果你想要运行时使用,你可以使用Win32_PageFileUsage。

请注意您在该文档中所需的提升权限。

目前,我看不到任何访问最小值和推荐值的方法。

【讨论】:

@Billy - WMI 仍然是微软首选的系统管理解决方案。请不要射击信使。您的替代方案看起来不错,但注册表修改有其自身的缺陷。 不射击信使。只是说 :) 在 C++ 中获取 WMI 数据只是一个庞大的集群 f*** :(。+1. @Billy - 没有争论,C# 让这变得容易多了。【参考方案2】:

该信息存储在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Session Manager\Memory Managment 中的PagingFiles 值中。它是一个REG_MULTI_SZ,每个字符串的格式为:

PAGINGFILEPATH StartSize MaxSize

因此,例如,我将 C 盘的大小设置为 16384 MB,关键数据如下所示:

L"C:\pagefile.sys 16384 16384\0"

注意2:可以省略数字,在这种情况下,系统会管理指定驱动器上页面文件的大小。

注意:此处指定的值不是系统当前使用的值,而是系统重新启动时将使用的值。这是因为分页文件一般在系统运行后就不能再更改,只能扩展分页文件。因此,如果用户更改了设置但未重新启动,则该键将包含重新启动后的设置,而不是当前有效的设置。

如果您希望设置当前生效,您可以检查每个驱动器上pagefile.sys 的大小。这不会给你最大尺寸,但它至少会给你一个想法。

【讨论】:

@Steve:谢谢。也给你 +1 :) 遗憾的是,如果虚拟内存设置为“系统管理大小”,这将不起作用。它仅在您手动指定条目时才有效。否则注册表项只有文件名。 (至少在 Vista 上是这样,目前还不确定 XP/7) @Drew:“系统托管大小”就是这样——它没有在任何地方设置,内核选择它认为适合给定工作负载的大小。如果没有大小,那么您可以假设系统管理的大小,关于页面文件配置,您无话可说。在我能找到的任何地方都没有定义内核如何选择要使用的大小。

以上是关于如何使用 C++ 在 Windows 上检索分页文件大小的“最小允许”/“推荐”/“当前分配”值?的主要内容,如果未能解决你的问题,请参考以下文章

我如何检索所有 twilio 频道或分页,按更新的频道属性排序?

使用 C++ 在 Windows 中检索 CPU 负载百分比总数

从 USB 存储器中检索序列号(Windows 环境 c++)

使用 C++ 和 WinAPI 在 Windows 8 上获取登录用户名或电子邮件

使用 C++ 和 WinAPI 在 Windows 8 上获取登录用户名或电子邮件

如何从linux二进制文件中存储和检索数据