User32.dll ou Kernel32.dll não inicializa
Este artigo descreve um problema em que um aplicativo executado por CreateProcess
ou CreateProcessAsUser
pode falhar.
Aplica-se a: Microsoft Windows
Número de KB original: 184802
Sintomas
Um aplicativo que é executado por CreateProcess
ou CreateProcessAsUser
pode falhar e você recebe uma das seguintes mensagens de erro:
Falha na inicialização do sistema> de biblioteca <dinâmica\system32\user32.dll falha. O processo está terminando anormalmente. Falha na inicialização do sistema> de biblioteca <dinâmica\system32\kernel32.dll falha. O processo está terminando anormalmente.
Além disso, o processo com falha retorna o código de saída 128 ou o seguinte:
error:ERROR_WAIT_NO_CHILDREN
Motivo
Essa falha ocorre por um dos seguintes motivos:
O processo executado não tem acesso de segurança correto à estação de janela e à área de trabalho associadas ao processo.
O sistema ficou sem pilha de área de trabalho.
Mais informações
Causa 1
O processo executado não tem acesso de segurança correto à estação de janela e à área de trabalho associadas ao processo.
O membro lpDesktop da estrutura STARTUPINFO que é passada para
CreateProcess
ouCreateProcessAsUser
especifica a estação de janela e a área de trabalho que estão associadas ao processo executado. O processo executado deve ter acesso correto à área de trabalho e à estação de janela especificada.Causa 2
O sistema ficou sem pilha de área de trabalho.
Cada objeto de área de trabalho no sistema tem um heap de área de trabalho associado a ele. O objeto desktop usa o heap para armazenar menus, ganchos, cadeias de caracteres e janelas. No Windows Server 2003 e no Windows XP de 32 bits, o sistema aloca o heap de área de trabalho de um buffer de 48 megabytes (MB) em todo o sistema. Além de heaps de área de trabalho, drivers de impressora e drivers de fonte também usam esse buffer.
As áreas de trabalho estão associadas a estações de janela. Uma estação de janela pode conter zero ou mais áreas de trabalho. Você pode alterar o tamanho do heap da área de trabalho alocado para uma área de trabalho associada a uma estação de janela alterando o valor do registro a seguir.
Observação
Não recomendamos que você use a opção /3GB. A opção /3GB é especificada no arquivo Boot.ini. O comutador de /3 GB tem suporte apenas para sistemas operacionais de 32 bits.
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\SubSystems\Windows
No Windows Server 2003 e no Windows XP de 32 bits, os dados padrão desse valor de registro serão semelhantes aos seguintes (todos em uma linha):
%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
Em diferentes versões do Windows, os dados padrão para esse valor de registro se assemelham ao seguinte:
Para Windows Vista RTM (32 bits)
SharedSection=1024,3072,512
Para Windows Vista SP1, Windows 7, Windows 8, Windows 8.1 (32 bits) e 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 e Windows Server 2012 R2 (64 bits)
SharedSection=1024,20480,768
Os valores numéricos que seguem SharedSection=
controlam como o heap da área de trabalho é alocado. Esses SharedSection
valores são especificados em quilobytes. Há configurações separadas para áreas de trabalho associadas a estações de janela interativas e não interinterativas.
Observação
Se você alterar os SharedSection
valores no registro, deverá reiniciar o sistema para que as alterações entrem em vigor.
Importante
Esta seção, método ou tarefa contém etapas que descrevem como modificar o Registro. Entretanto, sérios problemas poderão ocorrer caso você modifique o Registro incorretamente. Portanto, siga essas etapas cuidadosamente. Para mais proteção, faça o backup do registro antes de modificá-lo. Em seguida, você poderá restaurar o registro se ocorrer um problema. Para saber mais sobre como fazer o backup e restaurar o registro, consulte Como fazer o backup e restaurar o registro no Windows.
O primeiro SharedSection
valor (1024) é o tamanho de heap compartilhado comum a todas as áreas de trabalho. Isso inclui a tabela de identificadores globais. Esta tabela contém alças para janelas, menus, ícones, cursores e assim por diante e configurações do sistema compartilhado. É improvável que você tenha que alterar esse valor.
O segundo SharedSection
valor é o tamanho do heap da área de trabalho para cada área de trabalho associada à estação de janela interativa WinSta0. Objetos de usuário como ganchos, menus, cadeias de caracteres e janelas consomem memória neste heap de área de trabalho. É improvável que você tenha que alterar esse valor.
Cada área de trabalho criada na estação de janela interativa usa o heap de área de trabalho padrão de 3.072 KB. Por padrão, o sistema cria as três áreas de trabalho a seguir no Winsta0:
Winlogon
Padrão
A área de trabalho de aplicativo padrão será usada por todos os processos para os quais
Winsta0\default
é especificado no membro da estrutura STARTUPINFO.lpDesktop. Quando o membro da estrutura lpDesktop é NULL, a estação de janela e a área de trabalho são herdadas do processo pai. Todos os serviços executados na conta LocalSystem com a opção Permitir que o Serviço interaja com a inicialização da Área de Trabalho selecionada usarãoWinsta0\Default
. Todos esses processos compartilharão o heap de área de trabalho associado à área de trabalho de aplicativo padrão.Proteção de tela
A área de trabalho de salvamento de tela é criada na estação de janela interativa (WinSta0) quando um protetor de tela é exibido.
O terceiro valor sharedSection é o tamanho do heap da área de trabalho para cada área de trabalho associada a uma estação de janela não interativa. Se esse valor não estiver presente, o tamanho do heap da área de trabalho para estações de janela não interinterativas será igual ao tamanho especificado para estações de janela interativas (ou seja, o segundo valor sharedSection).
Se apenas dois valores sharedSection estiverem presentes, você poderá adicionar um terceiro valor para especificar o tamanho do heap da área de trabalho para áreas de trabalho criadas em estações de janela não interativas.
Cada processo de serviço executado em uma conta de usuário receberá uma nova área de trabalho em uma estação de janela não interativa criada pelo SCM (Service Control Manager). Portanto, cada serviço executado em uma conta de usuário consumirá o número de quilobytes de heap de área de trabalho especificado no terceiro valor sharedSection. Todos os serviços executados na conta LocalSystem quando Permitir que o Serviço Interaja com a Área de Trabalho não são selecionados compartilham o heap de área de trabalho da área de trabalho Padrão na estação windows de serviço não interinterativo (Service-0x0-3e7$).
O heap de área de trabalho total que está sendo usado nas estações de janela interativas e não interinterativas deve caber no buffer.
Diminuir o segundo ou terceiro valor sharedSection aumentará o número de áreas de trabalho que podem ser criadas nas estações de janela correspondentes. Valores menores limitarão o número de ganchos, menus, cadeias de caracteres e janelas que podem ser criados em uma área de trabalho. Por outro lado, o aumento do segundo ou terceiro valor sharedSection diminuirá o número de áreas de trabalho que podem ser criadas. No entanto, isso também aumentará o número de ganchos, menus, cadeias de caracteres e janelas que podem ser criados em uma área de trabalho.
Como o SCM cria uma nova área de trabalho na estação de janela nãointerativa para cada processo de serviço em execução em uma conta de usuário, um terceiro valor de SharedSection maior reduzirá o número de serviços de conta de usuário que podem ser executados com êxito no sistema. O mínimo que pode ser especificado para o segundo ou terceiro valor sharedSection é 128. Qualquer tentativa de usar um valor menor usará 128.
O heap da área de trabalho é alocado por User32.dll quando um processo precisa de objetos de usuário. Se um aplicativo não depender de User32.dll, ele não consumirá heap de área de trabalho.
Observação
No Windows Server 2003, o evento específico é registrado no log do Sistema quando uma das seguintes condições é verdadeira:
Se o heap da área de trabalho ficar cheio, o seguinte evento será registrado:
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.
Nesse caso, aumente o tamanho do heap da área de trabalho.
Se o heap de área de trabalho total se tornar o tamanho do buffer em todo o sistema, o seguinte evento será registrado:
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.
Nesse caso, diminua o tamanho do heap da área de trabalho.
No Windows Server 2003, um buffer em todo o sistema é de 20 MB quando uma das seguintes condições é verdadeira:
- Você está em um ambiente dos Serviços terminais.
- A opção /3GB é especificada no arquivo Boot.ini.
Aplicável 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 Edição Enterprise (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 Datacenter
- Windows Server 2012 R2 Standard
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de