User32.dll または Kernel32.dll の初期化に失敗する

文書翻訳 文書翻訳
文書番号: 184802 - 対象製品
この記事は、以前は次の ID で公開されていました: JP184802
すべて展開する | すべて折りたたむ

目次

現象

CreateProcess() 関数または CreateProcessAsUser() 関数のいずれかを使用して実行されるアプリケーションが失敗し、以下のいずれかのエラー メッセージが表示されることがあります。
ダイナミック リンク ライブラリ <system>\system32\user32.dll の初期化に失敗しました。プロセスは異常終了します。
ダイナミック リンク ライブラリ <system>\system32\kernel32.dll の初期化に失敗しました。プロセスは異常終了します。
失敗したプロセスから、以下の終了コード 128 が返されます。
ERROR_WAIT_NO_CHILDREN

原因

この問題は、以下のいずれかが原因で発生します。
  1. 実行されたプロセスに、プロセスに関連付けられたウィンドウ ステーションやデスクトップへの適切なセキュリティ アクセス許可がない。
  2. システムでデスクトップ ヒープが不足している。

詳細

原因 1

実行されたプロセスに、プロセスに関連付けられたウィンドウ ステーションやデスクトップへの適切なセキュリティ アクセス許可がない。

CreateProcess() 関数または CreateProcessAsUser() 関数に渡された STARTUPINFO 構造体の lpDesktop メンバにより、実行されたプロセスに関連付けられたウィンドウ ステーションやデスクトップが指定されます。実行されたプロセスには、指定されたウィンドウ ステーションやデスクトップへの適切なセキュリティ アクセス許可が必要です。

ウィンドウ ステーションおよびデスクトップに関するセキュリティの問題の解決方法の関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
165194 CreateProcessAsUser() 関数とウィンドウ ステーションおよびデスクトップ

原因 2

システムでデスクトップ ヒープが不足している。

システム上のすべてのデスクトップ オブジェクトには、デスクトップ ヒープが関連付けられています。デスクトップ オブジェクトでは、ヒープを使用してメニュー、フック、文字列、ウィンドウが格納されます。システムにより、システム全体の 48 MB のバッファからデスクトップ ヒープが割り当てられます。デスクトップ ヒープだけでなく、プリンタやフォント ドライバでもこのバッファが使用されます。

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

: /3GB スイッチの使用はお勧めしません。/3GB スイッチは boot.ini ファイルで指定します。
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\SubSystems\Windows
このレジストリ値のデフォルトのデータは、以下のとおりです (すべて 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
				
デスクトップ ヒープの割り当て方法は、"SharedSection=" の後に続く 3 つの数値によって制御されます。これらの SharedSection の値は、KB 単位で指定されます。この他に、対話型のウィンドウ ステーションに関連付けられたデスクトップに対する設定、および非対話型のウィンドウ ステーションに関連付けられたデスクトップに対する設定があります。

: レジストリの SharedSection の値を変更した場合、変更を有効にするには、システムを再起動する必要があります。

重要 : このセクション、方法、またはタスクには、レジストリの編集方法が記載されています。レジストリを誤って変更すると、深刻な問題が発生することがあります。レジストリを編集する際には十分に注意してください。万一に備えて、編集の前にレジストリをバックアップしておくと、問題が発生した場合にレジストリを復元することができます。バックアップおよび復元方法の詳細を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
322756 Windows でレジストリをバックアップおよび復元する方法


SharedSection の最初の値 (1024) は、すべてのデスクトップに共通の共有ヒープ サイズです。この値には、ウィンドウ、メニュー、アイコン、カーソルなどへのハンドルを保持するグローバル ハンドル テーブルや、共有のシステム設定が含まれます。この値の変更が必要になる可能性はほとんどありません。

SharedSection の 2 つ目の値 (3072) は、"対話型" のウィンドウ ステーション "WinSta0" に関連付けられている各デスクトップのデスクトップ ヒープのサイズです。フック、メニュー、文字列、ウィンドウなどのユーザー オブジェクトでは、このデスクトップ ヒープ内のメモリが使用されます。この 2 つ目の SharedSection の値の変更が必要になる可能性はほとんどありません。

対話型のウィンドウ ステーションで作成される各デスクトップでは、デフォルトの 3,072 KB のデスクトップ ヒープが使用されます。デフォルトでは、システムにより、以下の 3 つのデスクトップが Winsta0 に作成されます。
  • Winlogon
  • Default
    "Default" アプリケーション デスクトップは、STARTUPINFO.lpDesktop 構造体メンバで "Winsta0\default" が指定されているすべてのプロセスで使用されます。lpDesktop 構造体メンバが "NULL" の場合は、ウィンドウ ステーションやデスクトップは親プロセスから継承されます。LocalSystem アカウントで実行されていて、スタートアップ オプションの [デスクトップとの対話をサービスに許可] チェック ボックスがオンになっているすべてのサービスでは、"Winsta0\Default" が使用されます。これらのすべてのプロセスで、"Default" アプリケーション デスクトップに関連付けられている同じデスクトップ ヒープが共有されます。
  • Screen-saver
    スクリーン セーバー デスクトップは、スクリーン セーバーが表示されたときに、対話型のウィンドウ ステーション (WinSta0) に作成されます。
SharedSection の 3 つ目の値 (512) は、"非対話型" のウィンドウ ステーションに関連付けられている各デスクトップのデスクトップ ヒープのサイズです。この値が指定されていない場合、非対話型のウィンドウ ステーションに対するデスクトップ ヒープのサイズは、対話型のウィンドウ ステーションに指定されたサイズ (2 つ目の SharedSection の値) と同じです。

SharedSection の値が 2 つのみ指定されている場合は、3 つ目の値として "512" を追加して、非対話型のウィンドウ ステーションに作成されたデスクトップのデスクトップ ヒープのサイズを指定できます。

ユーザー アカウントで実行されているすべてのサービス プロセスは、サービス コントロール マネージャ (SCM) によって作成された非対話型のウィンドウ ステーションの新しいデスクトップを受け取ります。このため、ユーザー アカウントで実行されている各サービスでは、SharedSection の 3 つ目の値で指定されているサイズ (KB 単位) のデスクトップ ヒープが使用されます。LocalSystem アカウントで実行されていて、[デスクトップとの対話をサービスに許可] チェック ボックスがオフになっているすべてのサービスでは、非対話型サービスのウィンドウ ステーション (Service-0x0-3e7$) の "Default" デスクトップのデスクトップ ヒープが共有されます。

対話型および非対話型のウィンドウ ステーションで使用されるデスクトップ ヒープの合計サイズは、システム全体の 48 MB のバッファのサイズ内に収める必要があります。

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

SCM により、ユーザー アカウントで実行されているサービス プロセスごとに、非対話型のウィンドウ ステーションに新しいデスクトップが作成されるため、SharedSection の 3 つ目の値を大きくして各デスクトップのサイズを大きくすると、システム上で正常に実行できるユーザー アカウント サービスの数が減少します。SharedSection の 2 つ目または 3 つ目の値に指定できる最小値は 128 です。128 より小さい値を指定しても、デフォルトの 128 に設定されます。

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

: Windows Server 2003 では、以下のいずれかの条件に該当する場合、システム イベント ログに特定のイベントが記録されます。
  • デスクトップ ヒープがいっぱいになった場合は、以下のイベントが記録されます。

    種類 : 警告
    ソース : Win32k
    分類 : なし
    イベント ID : 243
    日付 : Date
    時刻 : Time
    ユーザー : N/A
    コンピュータ : ServerName
    説明 : デスクトップ ヒープの割り当てに失敗しました。

    この場合、デスクトップ ヒープのサイズを大きくします。
  • デスクトップ ヒープの合計サイズがシステム全体のバッファ サイズに達した場合は、以下のイベントが記録されます。

    種類 : 警告
    ソース : Win32k
    分類 : なし
    イベント ID : 244
    日付 : Date
    時刻 : Time
    ユーザー : N/A
    コンピュータ : ServerName
    説明 : デスクトップ ヒープがなくなったたためデスクトップを作成できませんでした。

    この場合、デスクトップ ヒープのサイズを小さくします。
Windows Server 2003 では、以下のいずれかの条件に該当する場合、システム全体のバッファ サイズは 20 MB です。
  • ターミナル サービス環境を使用している。
  • boot.ini ファイルで /3GB スイッチを指定している。

プロパティ

文書番号: 184802 - 最終更新日: 2008年5月19日 - リビジョン: 11.5
この資料は以下の製品について記述したものです。
  • Microsoft Win32 Application Programming Interface?を以下の環境でお使いの場合
    • Microsoft Windows NT 4.0
    • the operating system: Microsoft Windows 2000
    • Microsoft Windows XP Professional
    • Microsoft Windows Server 2003, Standard Edition (32-bit x86)
キーワード:?
kbdll kbkernbase kbprb kbsecurity KB184802
"Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。"

フィードバック

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com