Compartir a través de


User32.dll o Kernel32.dll no se inicializa

En este artículo se describe un problema por el que una aplicación ejecutada por CreateProcess o CreateProcessAsUser puede producir un error.

Se aplica a: Microsoft Windows
Número de KB original: 184802

Síntomas

Una aplicación ejecutada por CreateProcess o CreateProcessAsUser puede producir un error y recibe uno de los siguientes mensajes de error:

Error en la inicialización del sistema> de biblioteca <dinámica\system32\user32.dll. El proceso termina de forma anómala. Error en la inicialización del sistema> de biblioteca <dinámica\system32\kernel32.dll. El proceso termina de forma anómala.

Además, el proceso con errores devuelve el código de salida 128 o lo siguiente:

error:ERROR_WAIT_NO_CHILDREN

Causa

Este error se produce por uno de los siguientes motivos:

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

  • El sistema se quedó sin montón de escritorio.

Más información

  • Causa 1

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

    El miembro lpDesktop de la estructura STARTUPINFO que se pasa a CreateProcess o CreateProcessAsUser especifica la estación de ventana y el escritorio asociados al proceso ejecutado. El proceso ejecutado debe tener acceso de seguridad correcto a la estación de ventana y al escritorio especificados.

  • Causa 2

    El sistema se quedó sin montón de escritorio.

    Cada objeto de escritorio del sistema tiene un montón de escritorio asociado a él. El objeto de escritorio usa el montón para almacenar menús, enlaces, cadenas y ventanas. En Windows Server 2003 y Windows XP de 32 bits, el sistema asigna el montón de escritorio desde un búfer de 48 megabytes (MB) de todo el sistema. Además de los montones de escritorio, los controladores de impresora y los controladores de fuentes también usan este búfer.

    Los escritorios están asociados a las estaciones de ventana. Una estación de ventana puede contener cero o más escritorios. Puede cambiar el tamaño del montón de escritorio asignado para un escritorio asociado a una estación de ventana cambiando el siguiente valor del Registro.

    Nota

    No se recomienda usar el modificador /3GB. El modificador /3GB se especifica en el archivo Boot.ini. El modificador /3GB solo se admite para sistemas operativos de 32 bits. HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\SubSystems\Windows

En Windows Server 2003 y Windows XP de 32 bits, los datos predeterminados de este valor del Registro serán similares a los siguientes (todos en una sola 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

En diferentes versiones de Windows, los datos predeterminados de este valor del Registro serán similares a los siguientes:

  • Para Windows Vista RTM (32 bits)

    SharedSection=1024,3072,512
    
  • Para Windows Vista SP1, Windows 7, Windows 8, Windows 8.1 (32 bits) y Windows Server 2008 (32 bits)

    SharedSection=1024,12288,512
    
  • Para Windows Vista, Windows 7, Windows 8, Windows 8.1 (64 bits), Windows Server 2008, Windows Server 2008 R2, Windows Server 2012 y Windows Server 2012 R2 (64 bits)

    SharedSection=1024,20480,768
    

Los valores numéricos que siguen controlan SharedSection= cómo se asigna el montón de escritorio. Estos SharedSection valores se especifican en kilobytes. Hay configuraciones independientes para escritorios asociados a estaciones de ventana interactivas e no interactivas.

Nota

Si cambia los SharedSection valores del Registro, debe reiniciar el sistema para que los cambios surtan efecto.

Importante

Esta sección, método o tarea contiene pasos que le indican cómo modificar el Registro. No obstante, pueden producirse problemas graves si modifica el registro de manera incorrecta. Por lo tanto, asegúrese de que sigue estos pasos con atención. Para la protección añadida, realice una copia de seguridad del Registro antes de modificarlo. A continuación, puede restaurar el Registro si se produce un problema. Para obtener más información sobre cómo realizar copias de seguridad y restaurar el registro, vea Cómo hacer copia de seguridad y restaurar el registro en Windows.

El primer SharedSection valor (1024) es el tamaño del montón compartido común a todos los escritorios. Esto incluye la tabla de identificadores globales. Esta tabla contiene identificadores para ventanas, menús, iconos, cursores, etc. y la configuración del sistema compartido. Es poco probable que tenga que cambiar este valor.

El segundo SharedSection valor es el tamaño del montón de escritorio para cada escritorio asociado a la estación de ventana interactiva WinSta0. Los objetos de usuario, como enlaces, menús, cadenas y ventanas consumen memoria en este montón de escritorio. Es poco probable que tenga que cambiar este valor.

Cada escritorio que se crea en la estación de ventana interactiva usa el montón de escritorio predeterminado de 3072 KB. De forma predeterminada, el sistema crea los tres escritorios siguientes en Winsta0:

  • Winlogon

  • Valor predeterminado

    El escritorio de aplicación predeterminado se usará en todos los procesos para los que Winsta0\default se especifica en el miembro de estructura STARTUPINFO.lpDesktop. Cuando el miembro de estructura lpDesktop es NULL, la estación de ventana y el escritorio se heredan del proceso primario. Todos los servicios que se ejecutan en la cuenta localSystem con la opción permitir que el servicio interactúe con el escritorio seleccionada usará Winsta0\Default. Todos estos procesos compartirán el montón de escritorio asociado al escritorio de aplicación predeterminado.

  • Salvapantallas

    El escritorio del protector de pantalla se crea en la estación de ventana interactiva (WinSta0) cuando se muestra un protector de pantalla.

El tercer valor sharedSection es el tamaño del montón de escritorio para 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 para las estaciones de ventana no interactivas será el mismo que el tamaño especificado para las estaciones de ventana interactivas (es decir, el segundo valor sharedSection).

Si solo hay dos valores sharedSection, puede agregar un tercer valor para especificar el tamaño del montón de escritorio para los escritorios que se crean en estaciones de ventana no interactivas.

Cada proceso de servicio que se ejecuta en una cuenta de usuario recibirá un nuevo escritorio en una estación de ventana no interactiva creada por service Control Manager (SCM). Por lo tanto, cada servicio que se ejecuta en una cuenta de usuario consumirá el número de kilobytes de montón de escritorio especificado en el tercer valor sharedSection. Todos los servicios que se ejecutan en la cuenta LocalSystem cuando Permitir que el servicio interactúe con el escritorio no se selecciona compartan el montón de escritorio del escritorio predeterminado en la estación de windows de servicio no interactiva (Service-0x0-3e7$).

El montón de escritorio total que se usa en las estaciones de ventana interactivas e no interactivas debe caber en el búfer.

Al reducir el segundo o tercer valor sharedSection, aumentará el número de escritorios que se pueden crear en las estaciones de ventana correspondientes. Los valores más pequeños limitarán el número de enlaces, menús, cadenas y ventanas que se pueden crear en un escritorio. Por otro lado, aumentar el segundo o tercer valor sharedSection reducirá el número de escritorios que se pueden crear. Sin embargo, esto también aumentará el número de enlaces, menús, cadenas y ventanas que se pueden crear en un escritorio.

Dado que el SCM crea un nuevo escritorio en la estación de ventanas no interactivas para cada proceso de servicio que se ejecuta en una cuenta de usuario, un tercer valor de SharedSection mayor reducirá 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 para el segundo o tercer valor sharedSection es 128. Cualquier intento de usar un valor más pequeño usará en su lugar 128.

El montón de escritorio se asigna mediante User32.dll cuando un proceso necesita objetos de usuario. Si una aplicación no depende de User32.dll, no consumirá montón de escritorio.

Nota

En Windows Server 2003, el evento específico se registra en el registro del sistema cuando se cumple una de las condiciones siguientes:

  • Si el montón de escritorio se llena, se registra el siguiente evento:

    Event Type: Warning
    Event Source: Win32k
    Event Category: None
    Event ID: 243
    Date: Date
    Time: Time
    User: N/A
    Computer: ServerName
    Description: A desktop heap allocation failed.
    

    En este caso, aumente el tamaño del montón de escritorio.

  • Si el montón total de escritorio se convierte en el tamaño del búfer de todo el sistema, se registra el siguiente evento:

    Event Type: Warning
    Event Source: Win32k
    Event Category: None
    Event ID: 244
    Date: Date
    Time: Time
    User: N/A
    Computer: ServerName
    Description: Failed to create a desktop due to desktop heap exhaustion.
    

    En este caso, reduzca el tamaño del montón de escritorio.

En Windows Server 2003, un búfer de todo el sistema es de 20 MB cuando se cumple una de las condiciones siguientes:

  • Está en un entorno de Terminal Services.
  • El modificador /3GB se especifica en el archivo Boot.ini.

Se aplica a

  • Microsoft Windows XP Professional
  • Microsoft Windows XP Home Edition
  • Windows Vista Ultimate
  • Windows Vista Enterprise
  • Windows Vista Business
  • Windows Vista Home Premium
  • Windows 7 Ultimate
  • Windows 7 Enterprise
  • Windows 7 Professional
  • Windows 7 Home Premium
  • Windows 8 Enterprise
  • Windows 8 Pro, Windows 8
  • Windows 8.1 Enterprise
  • Windows 8.1 Pro
  • Windows 8.1
  • Microsoft Windows Server 2003 Datacenter Edition (x86 de 32 bits)
  • Microsoft Windows Server 2003 Datacenter x64 Edition
  • Microsoft Windows Server 2003 Enterprise Edition (x86 de 32 bits)
  • Microsoft Windows Server 2003 Enterprise x64 Edition
  • Microsoft Windows Server 2003 Standard Edition (x86 de 32 bits)
  • Microsoft Windows Server 2003 Standard x64 Edition
  • Windows Server 2008 Datacenter
  • Windows Server 2008 Enterprise
  • Windows Server 2008 R2 Datacenter
  • Windows Server 2008 R2 Enterprise
  • Windows Server 2008 Standard
  • Windows Server 2012 Datacenter
  • Windows Server 2012 Standard
  • Windows Server 2012 R2 Centro de datos
  • Windows Server 2012 R2 Standard