未能初始化 User32.dll 或 Kernel32.dll

文章翻译 文章翻译
文章编号: 184802 - 查看本文应用于的产品
展开全部 | 关闭全部

本文内容

症状

有时由 CreateProcess()CreateProcessAsUser() 失败并且您执行的应用程序会收到以下错误消息之一:
动态库的初始化 <system>\system32\user32.dll 失败。正在异常终止该进程。
初始化的动态库 <system>\system32\kernel32.dll 失败。正在异常终止该进程。
失败的进程返回退出代码 128 或
ERROR_WAIT_NO_CHILDREN

原因

失败是由下列值之一引起的:
  1. 执行的进程不具有正确的安全访问窗口站和桌面上与进程相关联。
  2. 系统已用尽桌面堆的不同而有所不同。

更多信息

原因 1

执行的进程不具有正确的安全访问窗口站和桌面上与进程相关联。

传递给 CreateProcess()CreateProcessAsUser() STARTUPINFO 结构的 lpDesktop 成员指定的窗口站和桌面是与执行的进程相关联。执行的进程必须具有正确的安全访问指定的窗口站和桌面上。

有关解决窗口站和台式计算机的安全问题的详细信息单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
165194CreateProcessAsUser() windowstations 和台式计算机

原因 2

系统已用尽桌面堆的不同而有所不同。

在系统上的每个桌面对象都有与之相关联的桌面堆栈。桌面对象使用堆来存储菜单、 挂钩、 字符串,和窗口。系统将从系统范围内的 48 MB 缓冲区分配桌面堆。除了桌面的堆打印机和字体驱动程序也使用该缓冲区。

桌面机将与窗口站相关联。窗口站可包含零个或多个桌面。桌面堆分配为与窗口站的桌面的大小可以更改以下注册表值中。

注意Microsoft 不建议使用 / 3gb 开关。在 boot.ini 文件中指定了 / 3gb 开关。
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\SubSystems\Windows
此注册表值的默认数据看起来类似于以下 (所有内容均在一行上):
   %SystemRoot%\system32\csrss.exe ObjectDirectory=\Windows
   SharedSection=1024,3072,512 Windows=On SubSystemType=Windows
   ServerDll=basesrv,1 ServerDll=winsrv:UserServerDllInitialization,3
   ServerDll=winsrv:ConServerDllInitialization,2 ProfileControl=Off
   MaxRequestThreads=16
				
后面的数字值"SharedSection ="控件如何桌面堆分配。这些 SharedSection 值指定以千字节为单位)。没有与交互式和非交互式窗口站的桌面的单独设置。

注意如果修改了注册表中的 SharedSection 值,则系统必须重新启动之前所做的更改生效。

重要此分区、 方法,或任务包含告诉您如何修改注册表的步骤。但是,如果注册表修改不当可能会出现严重问题。因此,请确保您仔细按照这些步骤。附加的保护注册表之前先备份您对其进行修改。然后,您可以在出现问题时还原注册表。有关如何备份和还原注册表的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
322756如何备份和还原在 Windows 注册表


第一个 SharedSection 值 (1024) 是到所有桌面公共共享的堆大小。这包括持有句柄窗口、 菜单、 图标、 游标,和等) 和共享的系统设置全局句柄表。是不可能您将需要更改此值。

第二个 SharedSection 值 (3072) 是为与"交互式"窗口站 WinSta0 相关联的每个桌面桌面堆的大小。用户对象 (如挂接、 菜单、 字符串,和窗口会消耗此桌面堆中的内存。是不可能将需要更改此第二个 SharedSection 值。

在 $ 交互式窗口工作站中创建的每个桌面使用默认的 3072 KB 桌面堆。默认状态下,有三个台式计算机由系统创建 Winsta0 中:
  • Winlogon
  • 默认 的应用程序的桌面将由其"Winsta0\default"指定 STARTUPINFO.lpDesktop 结构成员中的所有进程使用的"默认"。 lpDesktop 结构成员时窗口站和桌面上继承自父进程。在本地系统帐户下选中 允许服务与桌面交互] 启动选项执行的所有服务将都使用"Winsta0\Default"。所有这些进程将共享相同的桌面堆与"默认"应用程序桌面相关联。
  • 显示屏幕保护程序时,在交互式窗口站 (WinSta0) 创建 屏幕保护程序-的屏幕保护程序桌面。
第三个 SharedSection 值 (512) 是为"非交互式"窗口站与相关联的每个桌面桌面堆的大小。如果不存在此值为非交互式窗口站桌面堆的大小将与为交互式窗口站 (第二个 SharedSection 值) 指定的大小相同。

如果仅有两个 SharedSection 值,您可以添加"、 512"作为第三个值以指定在非交互式窗口工作站中创建的台式机桌面堆的大小。

每一个用户帐户下执行的服务进程将在创建服务控制管理器 (SCM) 的非交互式窗口站收到一个新的桌面。因此,用户帐户下执行每个服务将消耗桌面堆在第三个 SharedSection 该值中指定的千字节数。在 $ 允许服务与桌面交互进行 与本地系统帐户下执行的所有服务 选定的共享的非交互式服务窗口站 (服务-0x0 3e7 $) 中的"默认"桌面桌面堆。

在交互式和非交互式窗口站中使用的总桌面堆必须适合 48 MB 系统范围内缓冲区。

递减第二个或第三个 SharedSection 值将增加可创建在相应的窗口站的桌面机的数量。较小的值将限制挂钩、 菜单、 字符串,和可以创建一个桌面中的窗口的数。另一方面,增加第二个或第三个 SharedSection 值将减小桌面可创建的数,但它会增加的挂钩、 菜单、 字符串,和可以创建一个桌面中的窗口数。

由于 SCM 在非交互式窗口站的用户帐户下运行的每个服务进程中创建一个新的桌面,较大的桌面值的第三个 SharedSection 值将减少在系统可以成功地运行的用户帐户服务的数目。可以指定为第二个或第三个 SharedSection 值的最小值是 128。 若要使用较小的值的任何尝试将默认为 128。

桌面堆由 User32.dll 分配一个过程时需要的用户对象。如果不依赖于 User32.dll 应用程序,它将不消耗桌面堆。

注意在 Windows Server 2003,当满足下列条件之一为真时在系统事件日志中记录特定的事件:
  • 如果桌面堆已满,会记录以下事件:

    事件类型: 警告
    事件源: Win32k
    事件类别: 无
    事件 ID: 243
    日期: Date
    时间: Time
    用户: 不适用
    计算机: ServerName
    描述: A 桌面堆栈分配失败。

    在这种情况下增加桌面堆的大小。
  • 如果总的桌面堆栈将成为系统范围的缓冲区大小,会记录以下事件:

    事件类型: 警告
    事件源: Win32k
    事件类别: 无
    事件 ID: 244
    日期: Date
    时间: Time
    用户: 不适用
    计算机: ServerName
    描述: 无法创建桌面堆耗尽由于的桌面。

    在这种情况下减小桌面的堆大小。
在 Windows Server 2003,系统范围的缓冲区是 20 MB,当满足下列条件之一为真时:
  • 您是在终端服务环境中。
  • 在 Boot.ini 文件中指定了 / 3gb 开关。

属性

文章编号: 184802 - 最后修改: 2008年2月26日 - 修订: 11.3
这篇文章中的信息适用于:
  • Microsoft Win32 Application Programming Interface?当用于
    • Microsoft Windows NT 4.0
    • the operating system: Microsoft Windows 2000
    • Microsoft Windows XP Professional Edition
    • Microsoft Windows Server 2003 Standard Edition
关键字:?
kbmt kbdll kbkernbase kbprb kbsecurity KB184802 KbMtzh
机器翻译
注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。
点击这里察看该文章的英文版: 184802
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。

提供反馈

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com