다음을 통해 공유


User32.dll 또는 Kernel32.dll 초기화되지 않음

이 문서에서는 애플리케이션이 실행되거나 CreateProcess CreateProcessAsUser 실패할 수 있는 문제를 설명합니다.

적용 대상: 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(메가바이트) 버퍼에서 데스크톱 힙을 할당합니다. 데스크톱 힙 외에도 프린터 드라이버 및 글꼴 드라이버도 이 버퍼를 사용합니다.

    데스크톱은 창 스테이션과 연결됩니다. 창 스테이션에는 0개 이상의 데스크톱이 포함될 수 있습니다. 다음 레지스트리 값을 변경하여 창 스테이션과 연결된 데스크톱에 할당된 데스크톱 힙의 크기를 변경할 수 있습니다.

    참고 항목

    /3GB 스위치를 사용하지 않는 것이 좋습니다. /3GB 스위치는 Boot.ini 파일에 지정됩니다. /3GB 스위치는 32비트 운영 체제에서만 지원됩니다. HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\SubSystems\Windows

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 값을 변경하는 경우 변경 내용을 적용하려면 시스템을 다시 시작해야 합니다.

Important

이 절, 방법 또는 작업에는 레지스트리를 수정하는 방법에 대한 단계가 포함되어 있습니다. 그러나 레지스트리를 잘못 수정하면 심각한 문제가 발생할 수 있습니다. 따라서 다음 단계를 신중하게 수행해야 합니다. 추가 보호를 위해 레지스트리를 수정하기 전에 백업합니다. 그러면 문제가 발생할 경우 레지스트리를 복원할 수 있습니다. 레지스트리를 백업하고 복원하는 방법에 대한 자세한 내용은 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에서는 다음 조건 중 하나가 충족되면 시스템 전체 버퍼가 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