User32.dll 또는 Kernel32.dll 초기화되지 않음
- 아티클
- 2023. 07. 17.
이 문서의 내용
이 문서에서는 애플리케이션이 실행 CreateProcessCreateProcessAsUser 되거나 실패할 수 있는 문제를 설명합니다.
적용 대상: Microsoft Windows
원래 KB 번호: 184802
증상
실행 CreateProcess 중이거나 CreateProcessAsUser 실패할 수 있는 애플리케이션이며 다음 오류 메시지 중 하나를 수신합니다.
동적 라이브러리 <시스템>\system32\user32.dll 초기화하지 못했습니다. 프로세스가 비정상적으로 종료됩니다. 동적 라이브러리 <시스템>\system32\kernel32.dll 초기화하지 못했습니다. 프로세스가 비정상적으로 종료됩니다.
또한 실패한 프로세스는 종료 코드 128 또는 다음을 반환합니다.
error:ERROR_WAIT_NO_CHILDREN
원인
이 오류는 다음 이유 중 하나로 발생합니다.
- 실행된 프로세스에는 프로세스와 연결된 창 스테이션 및 데스크톱에 대한 올바른 보안 액세스 권한이 없습니다.
- 시스템에 데스크톱 힙이 부족했습니다.
추가 정보
- 원인 1실행된 프로세스와 연결된 창 스테이션 및 데스크톱에 CreateProcess 전달되거나 CreateProcessAsUser 지정되는 STARTUPINFO 구조체의 lpDesktop 멤버입니다. 실행된 프로세스에는 지정된 창 스테이션 및 데스크톱에 대한 올바른 보안 액세스 권한이 있어야 합니다.
- 실행된 프로세스에는 프로세스와 연결된 창 스테이션 및 데스크톱에 대한 올바른 보안 액세스 권한이 없습니다.
- 원인 2시스템의 모든 데스크톱 개체에는 연결된 데스크톱 힙이 있습니다. 데스크톱 개체는 힙을 사용하여 메뉴, 후크, 문자열 및 창을 저장합니다. Windows Server 2003 및 Windows XP 32비트에서 시스템은 시스템 전체 48MB(메가바이트) 버퍼에서 데스크톱 힙을 할당합니다. 데스크톱 힙 외에도 프린터 드라이버 및 글꼴 드라이버도 이 버퍼를 사용합니다.
참고
/3GB 스위치를 사용하지 않는 것이 좋습니다. /3GB 스위치는 Boot.ini 파일에 지정됩니다. /3GB 스위치는 32비트 운영 체제에서만 지원됩니다. HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\SubSystems\Windows
- 데스크톱은 창 스테이션과 연결됩니다. 창 스테이션에는 0개 이상의 데스크톱이 포함될 수 있습니다. 다음 레지스트리 값을 변경하여 창 스테이션과 연결된 데스크톱에 할당된 데스크톱 힙의 크기를 변경할 수 있습니다.
- 시스템에 데스크톱 힙이 부족했습니다.
Windows Server 2003 및 Windows XP 32비트에서 이 레지스트리 값의 기본 데이터는 다음과 유사합니다(모두 한 줄에 있음).
%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
다른 버전의 Windows에서 이 레지스트리 값의 기본 데이터는 다음과 유사합니다.
- Windows Vista RTM의 경우(32비트)
- 콘솔
-
SharedSection=1024,3072,512
- Windows Vista SP1, Windows 7, Windows 8, Windows 8.1(32비트) 및 Windows Server 2008(32비트)의 경우
- 콘솔
-
SharedSection=1024,12288,512
- Windows Vista, Windows 7, Windows 8, Windows 8.1(64비트), Windows Server 2008, Windows Server 2008 R2, Windows Server 2012 및 Windows Server 2012 R2(64비트)의 경우
- 콘솔
-
SharedSection=1024,20480,768
데스크톱 힙이 할당되는 방식을 제어하는 숫자 SharedSection= 값입니다. 이러한 SharedSection 값은 킬로바이트 단위로 지정됩니다. 대화형 및 비터활성 창 스테이션과 연결된 데스크톱에 대한 별도의 설정이 있습니다.
참고
레지스트리의 SharedSection 값을 변경하는 경우 변경 내용을 적용하려면 시스템을 다시 시작해야 합니다.
중요
이 절, 방법 또는 작업에는 레지스트리를 수정하는 방법에 대한 단계가 포함되어 있습니다. 그러나 레지스트리를 잘못 수정하면 심각한 문제가 발생할 수 있습니다. 따라서 다음 단계를 주의하여 수행해야 합니다. 추가된 보호를 위해 레지스트리를 수정하기 전에 백업하세요. 그런 다음 문제가 발생할 경우 레지스트리를 복원할 수 있습니다. 레지스트리를 백업 및 복원하는 방법에 대한 자세한 내용은 Windows에서 레지스트리를 백업 및 복원하는 방법을 참조하세요.
첫 번째 SharedSection 값(1024)은 모든 데스크톱에 공통된 공유 힙 크기입니다. 여기에는 전역 핸들 테이블이 포함됩니다. 이 표에는 창, 메뉴, 아이콘, 커서 등과 공유 시스템 설정에 대한 핸들이 있습니다. 이 값을 변경해야 할 가능성은 거의 없습니다.
두 번째 SharedSection 값은 대화형 창 스테이션 WinSta0과 연결된 각 데스크톱의 데스크톱 힙 크기입니다. 후크, 메뉴, 문자열 및 창과 같은 사용자 개체는 이 데스크톱 힙에서 메모리를 사용합니다. 이 값을 변경해야 할 가능성은 거의 없습니다.
대화형 창 스테이션에서 만든 각 데스크톱은 3,072KB의 기본 데스크톱 힙을 사용합니다. 기본적으로 시스템은 Winsta0에서 다음 세 개의 데스크톱을 만듭니다.
- Winlogon
- 기본
- 기본 애플리케이션 데스크톱은 STARTUPINFO.lpDesktop 구조체 멤버에 지정된 모든 프로세스 Winsta0\default 에서 사용됩니다. lpDesktop 구조체 멤버가 NULL이면 창 스테이션과 데스크톱이 부모 프로세스에서 상속됩니다. 서비스가 데스크톱과 상호 작용하도록 허용 시작 옵션이 선택된 LocalSystem 계정에서 실행되는 모든 서비스가 사용됩니다 Winsta0\Default. 이러한 모든 프로세스는 기본 애플리케이션 데스크톱과 연결된 데스크톱 힙을 공유합니다.
- 화면 보호기
- 화면 보호기가 표시되면 화면 보호기 데스크톱이 대화형 창 스테이션(WinSta0)에 만들어집니다.
세 번째 SharedSection 값은 비자동 창 스테이션과 연결된 각 데스크톱에 대한 데스크톱 힙의 크기입니다. 이 값이 없으면 비대화형 창 스테이션의 데스크톱 힙 크기는 대화형 창 스테이션(즉, 두 번째 SharedSection 값)에 지정된 크기와 동일합니다.
두 개의 SharedSection 값만 있는 경우 세 번째 값을 추가하여 비활성 창 스테이션에서 만든 데스크톱의 데스크톱 힙 크기를 지정할 수 있습니다.
사용자 계정으로 실행되는 모든 서비스 프로세스는 SCM(서비스 제어 관리자)에서 만든 비대화형 창 스테이션에서 새 데스크톱을 받게 됩니다. 따라서 사용자 계정으로 실행되는 각 서비스는 세 번째 SharedSection 값에 지정된 데스크톱 힙의 킬로바이트 수를 사용합니다. 서비스가 데스크톱과 상호 작용할 수 있도록 허용이 선택되지 않은 경우 LocalSystem 계정으로 실행되는 모든 서비스는 비자동 서비스 창 스테이션(Service-0x0-3e7$)에서 기본 데스크톱의 데스크톱 힙을 공유합니다.
대화형 및 비대화형 창 스테이션에서 사용되는 총 데스크톱 힙은 버퍼에 맞아야 합니다.
두 번째 또는 세 번째 SharedSection 값을 줄이면 해당 창 스테이션에서 만들 수 있는 데스크톱 수가 증가합니다. 값이 작을수록 데스크톱에서 만들 수 있는 후크, 메뉴, 문자열 및 창의 수가 제한됩니다. 반면에 두 번째 또는 세 번째 SharedSection 값을 늘리면 만들 수 있는 데스크톱 수가 줄어듭니다. 그러나 이렇게 하면 바탕 화면에서 만들 수 있는 후크, 메뉴, 문자열 및 창의 수도 증가합니다.
SCM은 사용자 계정으로 실행되는 모든 서비스 프로세스에 대해 비자동성 창 스테이션에 새 데스크톱을 만들기 때문에 세 번째 SharedSection 값이 크면 시스템에서 성공적으로 실행될 수 있는 사용자 계정 서비스의 수가 줄어듭니다. 두 번째 또는 세 번째 SharedSection 값에 대해 지정할 수 있는 최소값은 128입니다. 더 작은 값을 사용하려는 모든 시도는 대신 128을 사용합니다.
프로세스에 사용자 개체가 필요한 경우 데스크톱 힙은 User32.dll 의해 할당됩니다. 애플리케이션이 User32.dll 종속되지 않으면 데스크톱 힙을 사용하지 않습니다.
참고
Windows Server 2003에서는 다음 조건 중 하나가 true이면 특정 이벤트가 시스템 로그에 기록됩니다.
- 데스크톱 힙이 가득 차면 다음 이벤트가 기록됩니다.
- 출력
-
이 경우 데스크톱 힙 크기를 늘입니다.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.
- 전체 데스크톱 힙이 시스템 전체 버퍼 크기가 되면 다음 이벤트가 기록됩니다.
- 출력
-
이 경우 데스크톱 힙 크기를 줄입니다.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.
Windows Server 2003에서는 다음 조건 중 하나가 true인 경우 시스템 전체 버퍼는 20MB입니다.
- 터미널 서비스 환경에 있습니다.
- /3GB 스위치는 Boot.ini 파일에 지정됩니다.
적용 대상
- 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(32비트 x86)
- Microsoft Windows Server 2003 Datacenter x64 Edition
- Microsoft Windows Server 2003 Enterprise Edition(32비트 x86)
- Microsoft Windows Server 2003 Enterprise x64 Edition
- Microsoft Windows Server 2003 Standard Edition(32비트 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 Standard
- Windows Server 2012 R2 Datacenter
- Windows Server 2012 R2 Standard
'[Microsoft]' 카테고리의 다른 글
Windows Server 2012 R2, Windows 8 이상에서 10개의 스마트 카드 판독기 제한 (0) | 2023.11.03 |
---|---|
Authenticode 서명된 실행 파일에서 정보 가져오기 (0) | 2023.11.03 |
오류 문제 해결: 이벤트 메시지를 찾을 수 없음 (0) | 2023.11.03 |
SetSystemTimeAdjustment는 16 미만의 조정을 잃을 수 있습니다. (0) | 2023.11.03 |
MSXML 사용은 .NET 애플리케이션에서 지원되지 않습니다. (0) | 2023.11.03 |