Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
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 da biblioteca dinâmica <system>\system32\user32.dll. O processo está sendo encerrado de forma anormal. Falha na inicialização da biblioteca dinâmica <system>\system32\kernel32.dll. O processo está sendo encerrado de forma anormal.
Além disso, o processo com falha retorna o código de saída 128 ou o seguinte:
erro:ERRO_ESPERA_SEM_FILHOS
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 que estão associadas ao processo.
O sistema ficou sem memória heap da á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 que estão associadas ao processo.
O membro lpDesktop da estrutura STARTUPINFO, que é passado para
CreateProcess
ou paraCreateProcessAsUser
, especifica a estação de janela e a área de trabalho associada ao processo executado. O processo executado deve ter acesso de segurança correto à estação de janela e à área de trabalho especificadas.Causa 2
O sistema ficou sem memória heap da área de trabalho.
Cada objeto da área de trabalho no sistema possui um heap de desktop associado a ele. O objeto da área de trabalho 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 da área de trabalho a partir de um buffer de 48 megabytes (MB) global do sistema. Além de heaps de área de trabalho, drivers de impressora e drivers de fonte também usam esse buffer.
Os desktops estão associados 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 /3 GB. A opção /3 GB é especificada no arquivo Boot.ini. A opção /3GB 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 do 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 desse valor do Registro serão semelhantes 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 interativas.
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 informam como modificar o registro. No entanto, problemas graves poderão ocorrer se você modificar o registro incorretamente. Portanto, certifique-se de seguir estas etapas com cuidado. Para obter proteção adicional, faça backup do registro antes de modificá-lo. Assim, é possível restaurar o registro caso ocorra um problema. Para obter mais informações sobre como fazer backup e restaurar o registro, consulte Como fazer backup e restaurar o registro no Windows.
O primeiro SharedSection
valor (1024) é o tamanho de heap compartilhado comum a todos os desktops. Isso inclui a tabela de identificadores global. 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ê precise 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 da área de trabalho. É improvável que você precise alterar esse valor.
Cada desktop criado na estação de janelas interativas usa a pilha padrão de desktop de 3.072 KB. Por padrão, o sistema cria as três áreas de trabalho a seguir no Winsta0:
Winlogon
Padrão
O desktop padrão do aplicativo será usado 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 que são executados na conta LocalSystem com a opção de inicialização "Permitir que o Serviço Interaja com o Desktop" selecionada usarãoWinsta0\Default
. Todos esses processos compartilharão o heap da área de trabalho associado à área de trabalho do aplicativo padrão.Proteção de tela
A área de trabalho do protetor 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 interativas 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 da á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 está selecionado, compartilham o heap da área de trabalho Padrão na estação de janelas de serviço não interativa (Service-0x0-3e7$).
O heap de área de trabalho total que está sendo usado nas estações de janela interativas e nãointerativas deve caber no buffer.
Diminuir o segundo ou o terceiro valor de 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, aumentar o segundo ou terceiro valor de SharedSection diminuirá o número de desktops que podem ser criados. 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 de desktop é 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 desktop.
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 de memória da área de trabalho.
Se o heap de área de trabalho total atingir o tamanho do buffer de todo o sistema, o seguinte evento será registrado em log:
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 de Serviços de Terminal.
- A opção /3 GB é especificada no arquivo Boot.ini.
Aplica-se 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
- O 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 Datacenter
- Windows Server 2012 R2 Standard