Windows 7中一个进程的GDI对象的上限是多少?

Mic*_*cky 14 gdi resource-leak windows-7

有一个GDI泄漏的应用程序最终将达到10,000个分配的GDI对象并崩溃.我尝试将GDIProcessHandleQuota增加到20,000,但程序在达到10,000个对象时仍然崩溃.我们目前正在努力修补此漏洞,但出于好奇 - 是否有办法增加单个流程的GDI限制?或者10k个人应用程序的硬限制?

Der*_*ark 15

10K是硬限制.

GDI对象表示图形设备界面资源,如字体,位图,画笔,笔和设备上下文(绘图表面).与USER对象一样,窗口管理器将进程限制为最多10,000个GDI对象 [...]

Mark Russinovich有一系列文章深入探讨了Windows中的各种限制.您可能会发现这两个有用:

Raymond Chen的另一篇好文章:

  • `10K 是一个硬限制。` 这似乎不是真的。您能否在[JimR的回答](http://stackoverflow.com/a/9723784/2932052)中的howto中添加有关您所参考的限制关系的详细信息 (3认同)
  • 有一个名为 GDIProcessHandleQuota 的注册表项。改变这个限制似乎并不难。我认为您混合了 GDI 句柄和用户句柄。 (2认同)
  • 我知道这个帖子已经过时了,但是对于那些想查看上面的 Russinovich 链接的人(至少对我来说已经死了),这里是活的链接:https://techcommunity.microsoft.com/t5/windows-blog -archive/pushing-the-limits-of-windows-user-and-gdi-objects-8211-part-1/ba-p/723881 和 https://techcommunity.microsoft.com/t5/windows-blog-archive /推动 Windows 用户和 GDI 对象的限制-8211-part-2/ba-p/723897 (2认同)

Jim*_*imR 6

有一个可行的解决方案.我在这里处理一个行为不端的供应商的应用程序,它分配了大量的GDI对象,这个解决方案允许它在大多数时间工作......

reg query "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\SubSystems" /v windows

查找SharedSection=哪个应该是逗号分隔的3个数字.将中间数一次增加1024,看看是否能解决您的问题.您正在使用此变量控制"桌面堆"的数量,这在过去允许我运行行为不端的GDI.

请查看KB184802以获取更多信息.搜索SharedSection以查找页面的相关部分.