PRB: Error al inicializar User32.dll o Kernel32.dll

Seleccione idioma Seleccione idioma
Id. de artículo: 184802 - Ver los productos a los que se aplica este artículo
Importante
Este artículo contiene información sobre cómo modificar el Registro. Antes de modificar el Registro, asegúrese de hacer una copia de seguridad del mismo y de que sabe cómo restaurarlo si ocurre algún problema. Para obtener información acerca de cómo realizar una copia de seguridad, restaurar y modificar el Registro, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
256986 Descripción del Registro de Microsoft Windows
Expandir todo | Contraer todo

En esta página

Síntomas

A veces una aplicación que se ejecuta con CreateProcess() o CreateProcessAsUser() tiene un error y puede aparecer un mensaje de error similar a los siguientes:
Error en la inicialización de la biblioteca de vínculos dinámicos <system>\system32\user32.dll. El proceso está terminando de forma anormal.
Error en la inicialización de la biblioteca de vínculos dinámicos <system>\system32\kernel32.dll. El proceso está terminando de forma anormal.
El proceso que ha producido el error devuelve el código de salida 128 o
ERROR_WAIT_NO_CHILDREN

Causa

El error se produce por una de las siguientes causas:
  1. El proceso ejecutado no dispone del acceso de seguridad adecuado a la estación de ventana y escritorio asociados con el proceso.
  2. El sistema se ha quedado sin el montón de escritorio.

Más información

Causa 1

El proceso ejecutado no tiene el acceso de seguridad adecuado a la estación de ventana y el escritorio asociados al proceso.

El miembro lpDesktop de la estructura STARTUPINFO pasado a CreateProcess() o CreateProcessAsUser() especifica qué estación de ventana y escritorio están asociados con el proceso ejecutado. El proceso ejecutado debe tener el acceso de seguridad adecuado a la estación de ventana y el escritorio especificados.

Para obtener más información acerca de cómo resolver los problemas de seguridad relacionados con estaciones de ventana y escritorios, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
165194 Estaciones de ventana y escritorios de CreateProcessAsUser()

Causa 2

El sistema se ha quedado sin el montón de escritorio.

Cada objeto de escritorio del sistema tiene un montón de escritorio asociado. El objeto de escritorio utiliza un montón para almacenar menús, vínculos, cadenas y ventanas. El sistema asigna un montón de escritorio a partir de un búfer de 48 MB para todos sus elementos. Además de los montones de escritorio, las impresoras y controladores de fuentes también utilizan este búfer.

Los escritorios están asociados con estaciones de ventana. Una estación de ventana puede contener cero o más escritorios. El tamaño del motón de escritorio asignado a un escritorio que está asociado a una estación de ventana puede cambiarse en el siguiente valor del Registro.

Nota
Este valor del Registro sólo es válido cuando no se utiliza el modificador /3GB. El modificador /3GB se especifica en el archivo boot.ini.
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\SubSystems\Windows
Los datos predeterminados de este valor del Registro serán parecidos a los siguientes (todos en una línea):
   %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				
Los valores numéricos que siguen a "SharedSection=" controlan cómo se asigna el montón de escritorio. Estos valores de SharedSection se especifican en kilobytes. Existen configuraciones independientes para los escritorios asociados con estaciones de ventana interactivas y no interactivas.

Nota
Si se modifican los valores de SharedSection del Registro, el sistema se debe reiniciar para que los cambios tengan efecto.

Advertencia
Pueden producirse graves problemas si modifica incorrectamente el Registro mediante el Editor del Registro o con cualquier otro método. Estos problemas pueden requerir que reinstale el sistema operativo. Microsoft no puede garantizar la solución de esos problemas. Modifique el Registro bajo su responsabilidad.

El primer valor de SharedSection (1024) es el tamaño del montón común a todos los escritorios. Esto incluye la tabla de control global que contiene los controles de ventanas, menús, iconos, cursores, etc., y la configuración de sistema compartida. Es poco probable que necesite cambiar este valor en algún momento.

El segundo valor de SharedSection (3072) es el tamaño del montón de escritorio de cada escritorio asociado a la estación de la ventana "interactiva" WinSta0. Objetos de usuario como vínculos, menús, cadenas y ventanas consumen memoria en este montón de escritorio. Es poco probable que necesite cambiar este segundo valor de SharedSection en algún momento.

Cada escritorio creado en la estación de ventana interactiva utiliza el montón de escritorio predeterminado de 3072 KB. De forma predeterminada, existen tres escritorios que el sistema ha creado en Winsta0:
  • Inicio de sesión en Windows
  • Predeterminado - El escritorio de aplicación "Predeterminado" se usará en todos los procesos en los que se especifique "Winsta0\default" en el miembro de la estructura STARTUPINFO.lpDesktop. Cuando el miembro de la estructura lpDesktop sea NULL, la estación de ventana y el escritorio se heredan del proceso principal. Todos los servicios que se ejecuten en la cuenta LocalSystem con la opción de inicio Permitir a los servicios que interactúen con el escritorio seleccionada utilizarán "Winsta0\Default". Todos estos procesos compartirán el mismo montón de escritorio asociado al escritorio de la aplicación "Predeterminado".
  • Protector de pantalla: el escritorio del protector de pantalla se crea en la estación de ventana interactiva (WinSta0) al mostrar un protector de pantalla.
El tercer valor de SharedSection (512) es el tamaño del montón de cada escritorio asociado a una estación de ventana "no interactiva". Si este valor no está presente, el tamaño del montón de escritorio de las estaciones de ventana no interactivas será el mismo que el tamaño especificado en las estaciones de ventana interactivas (el segundo valor de SharedSection).

Si sólo hay dos valores de SharedSection, puede agregar ",512" como tercer valor para especificar el tamaño del montón de escritorio para los escritorios creados en las estaciones de ventanas no interactivas.

Cada proceso de servicio ejecutado en una cuenta de usuario recibirá un escritorio nuevo en una estación de ventana no interactiva creada por el Administrador de control de servicios (SCM). De este modo, cada servicio ejecutado en una cuenta de usuario consume el número de kilobytes del montón de escritorio especificados en el tercer valor de SharedSection. Todos los servicios que se ejecutan en la cuenta LocalSystem con la opción Permitir a los servicios que interactúen con el escritorio no seleccionada comparten el montón de escritorio "Predeterminado" en la estación de ventana de servicio no interactiva (Service-0x0-3e7$).

Todo el montón de escritorio que se utiliza en las estaciones de ventana interactivas y no interactivas debe ajustarse al búfer de 48 MB para todo el sistema.

Al disminuir el segundo o tercer valor de SharedSection aumenta el número de escritorios que se pueden crear en las estaciones de ventana correspondientes. Los valores menores limitan el número de vínculos, menús, cadenas y ventanas que se pueden crear en un escritorio. Por otra parte, al aumentar el segundo o tercer valor de SharedSection disminuye el número de escritorios que se pueden crear pero aumenta el número de vínculos, menús, cadenas y ventanas que se pueden crear en un mismo escritorio.

Debido a que SCM crea un nuevo escritorio en la estación de ventana no interactiva por cada proceso de servicio que se ejecuta en una cuenta de usuario, un mayor valor de escritorio en el tercer valor de SharedSection reduce el número de servicios de cuenta de usuario que se pueden ejecutar correctamente en el sistema. El valor mínimo que se puede especificar en el segundo o tercer valor de SharedSection es 128. Cualquier otro valor inferior cambia a 128 de forma predeterminada.

User32.dll asigna el montón de escritorio cuando un proceso necesita objetos de usuario. Si una aplicación no depende de User32.dll, no consume montón de escritorio.

Propiedades

Id. de artículo: 184802 - Última revisión: viernes, 20 de octubre de 2006 - Versión: 10.2
La información de este artículo se refiere a:
  • Microsoft Win32 Application Programming Interface sobre las siguientes plataformas
    • Microsoft Windows NT 4.0
    • Microsoft Windows 2000 Standard Edition
    • Microsoft Windows XP Professional
    • Microsoft Windows Server 2003, Standard Edition (32-bit x86)
Palabras clave: 
kbdll kbkernbase kbsecurity kbprb KB184802

Enviar comentarios

 

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