User32.dllまたはKernel32.dll初期化しない

この記事では、実行されるアプリケーションまたは失敗する可能性があるアプリケーションの CreateProcess 問題 CreateProcessAsUser について説明します。

適用対象:  Microsoft Windows
元の KB 番号:   184802

現象

実行または失敗する可能性があるアプリケーションで、次のいずれかのエラー メッセージ CreateProcess CreateProcessAsUser が表示されます。

動的ライブラリの初期化に <system> 失敗\system32\user32.dllしました。 プロセスが異常終了しています。 動的ライブラリの初期化に <system> 失敗\system32\kernel32.dllしました。 プロセスが異常終了しています。

さらに、失敗したプロセスは終了コード 128 または次を返します。

error:ERROR_WAIT_NO_CHILDREN

原因

このエラーは、次のいずれかの理由で発生します。

  • 実行されたプロセスには、プロセスに関連付けられているウィンドウ ステーションとデスクトップへのセキュリティ アクセスが正しくありません。

  • システムがデスクトップ ヒープを使い切った。

詳細情報

  • 原因 1

    実行されたプロセスには、プロセスに関連付けられているウィンドウ ステーションとデスクトップへのセキュリティ アクセスが正しくありません。

    実行されたプロセスに関連付けられているウィンドウ ステーションとデスクトップに渡される、または指定する STARTUPINFO 構造体の lpDesktop CreateProcess CreateProcessAsUser メンバー。 実行されるプロセスには、指定したウィンドウ ステーションとデスクトップへのセキュリティ アクセスが正しく必要です。

  • 原因 2

    システムがデスクトップ ヒープを使い切った。

    システム上のすべてのデスクトップ オブジェクトには、デスクトップ ヒープが関連付けられている。 デスクトップ オブジェクトは、ヒープを使用してメニュー、フック、文字列、およびウィンドウを格納します。 サーバー 2003 Windows WINDOWS XP 32 ビットでは、システムはシステム全体の 48 メガバイト (MB) バッファーからデスクトップ ヒープを割り当てます。 デスクトップ ヒープに加えて、プリンター ドライバーとフォント ドライバーもこのバッファーを使用します。

    デスクトップはウィンドウ ステーションに関連付けられる。 ウィンドウ ステーションには、0 個以上のデスクトップを含めできます。 ウィンドウ ステーションに関連付けられているデスクトップに割り当てられているデスクトップ ヒープのサイズを変更するには、次のレジストリ値を変更します。

    注意

    /3GB スイッチを使用することをお勧めしません。 /3GB スイッチは、ファイル内でBoot.iniされます。 /3GB スイッチは、32 ビット オペレーティング システムでのみサポートされます。 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\SubSystems\Windows

サーバー 2003 Windows WINDOWS XP 32 ビットでは、このレジストリ値の既定のデータは次のようになります (すべて 1 行で)。

%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) は、すべてのデスクトップに共通の共有ヒープ サイズです。 これには、グローバル ハンドル テーブルが含まれます。 この表には、ウィンドウ、メニュー、アイコン、カーソルなどへのハンドル、および共有システム設定が保持されます。 この値を変更する必要がある可能性は低い。

2 番目の値は、対話型ウィンドウ ステーション WinSta0 に関連付けられている各デスクトップのデスクトップ ヒープ SharedSection のサイズです。 フック、メニュー、文字列、ウィンドウなどのユーザー オブジェクトは、このデスクトップ ヒープのメモリを消費します。 この値を変更する必要がある可能性は低い。

対話型ウィンドウ ステーションで作成される各デスクトップは、3,072 KB の既定のデスクトップ ヒープを使用します。 既定では、システムは Winsta0 で次の 3 つのデスクトップを作成します。

  • Winlogon

  • 既定値

    既定のアプリケーション デスクトップは、STARTUPINFO.lpDesktop 構造体メンバーで指定されているすべてのプロセス Winsta0\default で使用されます。 lpDesktop 構造体メンバーが NULL の場合、ウィンドウ ステーションとデスクトップは親プロセスから継承されます。 [サービスとデスクトップの対話を許可する] スタートアップ オプションが選択されている LocalSystem アカウントで実行されるサービスはすべて使用されます Winsta0\Default 。 これらのプロセスはすべて、既定のアプリケーション デスクトップに関連付けられているデスクトップ ヒープを共有します。

  • スクリーン セーバー

    スクリーン セーバーデスクトップは、スクリーン セーバーが表示されると、対話型ウィンドウ ステーション (WinSta0) に作成されます。

3 番目の SharedSection 値は、非アクティブ ウィンドウ ステーションに関連付けられている各デスクトップのデスクトップ ヒープのサイズです。 この値が存在しない場合、非対話型ウィンドウ ステーションのデスクトップ ヒープのサイズは、対話型ウィンドウ ステーションに指定されたサイズ (つまり、2 番目の SharedSection 値) と同じになります。

SharedSection 値が 2 つしか存在しない場合は、3 番目の値を追加して、非アクティブ ウィンドウ ステーションで作成されるデスクトップのデスクトップ ヒープのサイズを指定できます。

ユーザー アカウントで実行されるすべてのサービス プロセスは、サービス コントロール マネージャー (SCM) によって作成された非アクティブ ウィンドウ ステーション内の新しいデスクトップを受け取ります。 したがって、ユーザー アカウントで実行される各サービスは、3 番目の SharedSection 値で指定されたデスクトップ ヒープのキロバイト数を消費します。 [サービスとデスクトップとの対話を許可する] が選択されていない場合に LocalSystem アカウントで実行されるサービスはすべて、非対話サービス ウィンドウ ステーション (Service-0x0-3e7$) で既定のデスクトップのデスクトップ ヒープを共有します。

対話型ウィンドウ ステーションと非対話型ウィンドウ ステーションで使用されているデスクトップ ヒープの合計がバッファーに収まる必要があります。

2 番目または 3 番目の SharedSection 値を減らすと、対応するウィンドウ ステーションに作成できるデスクトップの数が増えます。 値を小さくすると、デスクトップで作成できるフック、メニュー、文字列、ウィンドウの数が制限されます。 一方、2 番目または 3 番目の SharedSection 値を大きくすると、作成できるデスクトップの数が減少します。 ただし、これにより、デスクトップで作成できるフック、メニュー、文字列、およびウィンドウの数も増えます。

SCM は、ユーザー アカウントで実行されているサービス プロセスごとに、非アクティブ ウィンドウ ステーションに新しいデスクトップを作成します。このため、SharedSection の 3 番目の値を大きくすると、システムで正常に実行できるユーザー アカウント サービスの数が減ります。 2 番目または 3 番目の SharedSection 値に指定できる最小値は 128 です。 小さい値を使用しようとすると、代わりに 128 が使用されます。

デスクトップ ヒープは、プロセスがユーザー オブジェクトをUser32.dllときに、ユーザー によって割り当てられます。 アプリケーションがデスクトップ ヒープに依存User32.dll場合、デスクトップ ヒープは使用されます。

注意

サーバー 2003 Windowsでは、次のいずれかの条件が満たされている場合、特定のイベントがシステム ログに記録されます。

  • デスクトップ ヒープが完全になると、次のイベントがログに記録されます。

    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.
    

    この場合は、デスクトップ のヒープ サイズを小さくします。

サーバー 2003 Windowsでは、次のいずれかの条件に当てはまる場合、システム全体のバッファーは 20 MB です。

  • ターミナル サービス環境にいます。
  • /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 ホーム プレミアム
  • Windows 8 Enterprise
  • Windows 8 Pro、Windows 8
  • Windows 8.1 Enterprise
  • Windows 8.1 Pro
  • Windows 8.1
  • Microsoft Windows Server 2003 データセンター エディション (32 ビット x86)
  • Microsoft Windows Server 2003 データセンター 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 2012R2 Standard