Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W tym artykule opisano problem, w którym aplikacja wykonywana przez CreateProcess
lub CreateProcessAsUser
może zakończyć się niepowodzeniem.
Dotyczy: Microsoft Windows
Oryginalny numer KB: 184802
Objawy
Aplikacja wykonywana przez CreateProcess
lub CreateProcessAsUser
może zakończyć się niepowodzeniem i zostanie wyświetlony jeden z następujących komunikatów o błędach.
Inicjalizacja <dynamicznej> biblioteki systemu\system32\user32.dll nie powiodła się. Proces kończy się nieprawidłowo. Inicjalizacja <dynamicznej> biblioteki systemu\system32\kernel32.dll nie powiodła się. Proces kończy się nieprawidłowo.
Ponadto proces, który zakończył się niepowodzeniem, zwraca kod zakończenia 128 lub następujący:
error:CZEKANIE_BRAK_DZIECI
Przyczyna
Ten błąd występuje z jednego z następujących powodów:
Uruchomiony proces nie ma odpowiedniego dostępu do zabezpieczeń stacji okienkowej i pulpitu powiązanych z tym procesem.
Systemowi zabrakło przestrzeni stosu pulpitu.
Więcej informacji
Przyczyna 1
Uruchomiony proces nie ma odpowiedniego dostępu do zabezpieczeń stacji okienkowej i pulpitu powiązanych z tym procesem.
Element członkowski lpDesktop w strukturze STARTUPINFO, który jest przekazywany do
CreateProcess
lubCreateProcessAsUser
, określa stację okienek i pulpit, które są skojarzone z wykonanym procesem. Wykonany proces musi mieć prawidłowy dostęp z zakresu bezpieczeństwa do określonej stacji systemowej i pulpitu.Przyczyna 2
Systemowi zabrakło przestrzeni stosu pulpitu.
Każdy obiekt pulpitu w systemie ma stertę pulpitu, która jest z nim skojarzona. Obiekt pulpitu używa sterty do przechowywania menu, haków, ciągów i okien. W systemach Windows Server 2003 i 32-bitowych systemach Windows XP system przydziela pamięć sterty pulpitu z systemowego buforu o pojemności 48 megabajtów (MB). Oprócz stert pulpitu sterowniki drukarek i sterowniki czcionek również używają tego buforu.
Pulpity są skojarzone ze stacjami okien. Stacja okien może zawierać zero lub więcej pulpitów. Można zmienić rozmiar pamięci stosu pulpitu przydzielonej dla pulpitu skojarzonego ze stacją okienek, zmieniając następującą wartość rejestru.
Uwaga / Notatka
Nie zalecamy używania przełącznika /3GB. Przełącznik /3GB jest określony w pliku Boot.ini. Przełącznik /3GB jest obsługiwany tylko w 32-bitowych systemach operacyjnych.
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\SubSystems\Windows
W systemach Windows Server 2003 i Windows XP 32-bitowych domyślne dane dla tej wartości rejestru będą przypominać następujące (wszystkie w jednym wierszu):
%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
W różnych wersjach systemu Windows domyślne dane dla tej wartości rejestru będą wyglądać podobnie do następujących:
W przypadku systemu Windows Vista RTM (32-bitowy)
SharedSection=1024,3072,512
W przypadku systemu Windows Vista z dodatkiem SP1, Windows 7, Windows 8, Windows 8.1 (32-bitowy) i Windows Server 2008 (32-bitowy)
SharedSection=1024,12288,512
W systemie Windows Vista, Windows 7, Windows 8, Windows 8.1 (64-bitowy), Windows Server 2008, Windows Server 2008 R2, Windows Server 2012 i Windows Server 2012 R2 (64-bitowy)
SharedSection=1024,20480,768
Wartości liczbowe, które kontrolują sposób przydzielania sterty pulpitu, są określone przez SharedSection=
. Te SharedSection
wartości są określane w kilobajtach. Istnieją oddzielne ustawienia dla pulpitów, które są powiązane z interaktywnymi i nieinteraktywnymi stacjami okien.
Uwaga / Notatka
Jeśli zmienisz SharedSection
wartości w rejestrze, musisz ponownie uruchomić system, aby zmiany zaczęły obowiązywać.
Ważne
Ten dział, metoda lub zadanie zawiera kroki, które wyjaśniają, jak zmodyfikować rejestr. Mogą jednak wystąpić poważne problemy, jeśli nieprawidłowo zmodyfikujesz rejestr. Dlatego upewnij się, że dokładnie przestrzegasz tych kroków. Aby uzyskać dodatkową ochronę, należy utworzyć kopię zapasową rejestru przed jego zmodyfikowaniem. Następnie możesz przywrócić rejestr, jeśli wystąpi problem. Aby uzyskać więcej informacji o tym, jak wykonać kopię zapasową i przywrócić rejestr, zobacz Jak wykonać kopię zapasową i przywrócić rejestr w Windows.
Pierwsza SharedSection
wartość (1024) to współużytkowany rozmiar sterty wspólny dla wszystkich środowisk pulpitowych. Obejmuje to globalną tabelę uchwytów. Ta tabela zawiera dojścia do okien, menu, ikon, kursorów itd. oraz udostępnionych ustawień systemowych. Jest mało prawdopodobne, aby kiedykolwiek trzeba było zmienić tę wartość.
Druga SharedSection
wartość to rozmiar sterty pulpitu dla każdego pulpitu skojarzonego z interaktywną stacją okien WinSta0. Obiekty użytkownika, takie jak uchwyty, menu, ciągi znaków i okna, zużywają pamięć w stercie pulpitu. Jest mało prawdopodobne, aby kiedykolwiek trzeba było zmienić tę wartość.
Każdy pulpit tworzony w interaktywnej stacji okienek używa domyślnej pamięci pulpitu o pojemności 3,072 KB. Domyślnie system tworzy następujące trzy pulpity w systemie Winsta0:
Winlogon
Wartość domyślna
Domyślny pulpit aplikacji będzie używany przez wszystkie procesy, dla których
Winsta0\default
określono człon struktury STARTUPINFO.lpDesktop. Gdy członek struktury lpDesktop ma wartość NULL, stacja robocza i pulpit są dziedziczone po procesie nadrzędnym. Wszystkie usługi, które są wykonywane na koncie LocalSystem, z zaznaczoną opcją "Zezwalaj usłudze na interakcję z pulpitem" w ustawieniach uruchamiania, będą używaćWinsta0\Default
. Wszystkie te procesy będą współdzielić stertę pulpitu skojarzoną z domyślnym desktopem aplikacji.Wygaszacz ekranu
Pulpit wygaszacza ekranu jest tworzony w stacji okien interaktywnych (WinSta0) w momencie wyświetlenia wygaszacza ekranu.
Trzecia wartość SharedSection to rozmiar sterty pulpitu dla każdego pulpitu skojarzonego z nieinteraktywną stacją okien. Jeśli ta wartość nie jest obecna, rozmiar stosu pulpitu dla nieinteraktywnych stacji okien będzie taki sam jak rozmiar określony dla interakcyjnych stacji okien, czyli druga liczba z SharedSection.
Jeśli istnieją tylko dwie wartości SharedSection, możesz dodać trzecią wartość, aby określić rozmiar sterty pulpitu dla pulpitów utworzonych w nieinteraktywnych stacjach okiennych.
Każdy proces serwisowy wykonywany na koncie użytkownika otrzyma nowy pulpit w nieinteraktywnej stacji okien utworzonej przez Menedżer Kontroli Usług (SCM). W związku z tym każda usługa wykonywana na koncie użytkownika będzie zużywać liczbę kilobajtów sterty pulpitu określonej w trzeciej wartości SharedSection. Wszystkie usługi wykonywane na koncie LocalSystem, gdy opcja "Zezwalaj usłudze na interakcję z pulpitem" nie jest zaznaczona, współdzielą stertę pulpitu domyślnego w nieinteraktywnej stacji okien usługi (Service-0x0-3e7$).
Łączna sterta pulpitu używana w interakcyjnych i nieinteraktywnych stacjach okien musi mieścić się w buforze.
Zmniejszenie drugiej lub trzeciej wartości parametru SharedSection zwiększy liczbę pulpitów, które można utworzyć w odpowiednich stacjach roboczych systemu. Mniejsze wartości ograniczają liczbę punktów zaczepienia, menu, ciągów i okien, które można utworzyć na pulpicie. Z drugiej strony zwiększenie drugiej lub trzeciej wartości SharedSection spowoduje zmniejszenie liczby komputerów stacjonarnych, które można utworzyć. Zwiększy to jednak również liczbę uchwytów, menu, ciągów i okien, które można utworzyć na pulpicie systemowym.
Ponieważ program SCM tworzy nowy pulpit w nieinteraktywnej stacji okien dla każdego procesu usługi uruchomionego na koncie użytkownika, większa trzecia wartość SharedSection zmniejszy liczbę usług działających na koncie użytkownika, które można pomyślnie uruchomić w systemie. Minimum, które można określić dla drugiej lub trzeciej wartości SharedSection, wynosi 128. Każda próba użycia mniejszej wartości będzie zamiast tego używać wartości 128.
Sterta pulpitu jest przydzielana przez User32.dll, gdy proces wymaga obiektów użytkownika. Jeśli aplikacja nie jest zależna od User32.dll, nie będzie używać stosu pulpitu.
Uwaga / Notatka
W systemie Windows Server 2003 określone zdarzenie jest rejestrowane w dzienniku systemu, gdy spełniony jest jeden z następujących warunków:
Jeśli sterta pulpitu stanie się pełna, rejestrowane jest następujące zdarzenie:
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.
W tym przypadku zwiększ rozmiar sterty pulpitu.
Jeśli całkowita sterta pulpitu osiąga rozmiar bufora systemu, rejestrowane jest następujące zdarzenie:
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.
W tym przypadku zmniejsz rozmiar sterty pulpitu.
W systemie Windows Server 2003 bufor dla całego systemu wynosi 20 MB, gdy spełniony jest jeden z następujących warunków:
- Jesteś w środowisku usług terminalowych.
- Przełącznik /3GB jest określony w pliku Boot.ini.
Odnosi się do
- 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, 32-bit)
- Microsoft Windows Server 2003 Datacenter x64 Edition
- Microsoft Windows Server 2003 Enterprise Edition (32-bitowy x86)
- Microsoft Windows Server 2003 Enterprise x64 Edition
- Microsoft Windows Server 2003 Standard Edition (32-bitowy x86)
- 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 standardowy
- Windows Server 2012 R2 Datacenter
- Windows Server 2012 R2 Standard