無法初始化 User32.dll 或 Kernel32.dll

請注意--重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,且可能由 Microsoft Community 利用 Community Translation Framework技術或人工進行事後編修。翻譯過程並無專業譯者參與。Microsoft 同時提供使用者人為翻譯、機器翻譯及社群編修後的機器翻譯三種版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,所有翻譯文章都可能不盡完美,內容都可能出現詞彙、語意或文法上的錯誤。就翻譯內容之不正確或錯誤,或客戶因使用翻譯內容所產生的任何損害,微軟不負擔任何責任。Microsoft將依合理的商業努力不斷地更新機器翻譯軟體和工具,以期能為使用者提供更好的服務。

按一下這裡查看此文章的英文版本:184802
徵狀
CreateProcessCreateProcessAsUser所執行的應用程式,可能會失敗,並且您收到下列錯誤訊息之一:
動態程式庫<system>的初始化失敗的 \system32\user32.dll。不正常終止處理程序。 </system>
動態程式庫<system>的初始化失敗的 \system32\kernel32.dll。不正常終止處理程序。 </system>

此外,失敗的處理程序會傳回結束代碼 128 或下列錯誤:
ERROR_WAIT_NO_CHILDREN
發生的原因
下列原因之一,就會發生此錯誤:
  • 執行的處理序並沒有正確的安全性存取權的視窗工作站和處理序相關聯的桌面。
  • 系統已用完的桌面堆積。
其他相關資訊

原因 1

執行的處理序並沒有正確的安全性存取權的視窗工作站和處理序相關聯的桌面。

傳遞給CreateProcessCreateProcessAsUser的 STARTUPINFO 結構的 lpDesktop 成員指定的視窗工作站和執行的處理程序相關聯的桌面。執行處理序必須具有正確的安全性存取指定的視窗工作站和桌面。

如需有關如何解決視窗工作站與桌上型電腦的安全性問題的詳細資訊,請按一下下面的文件編號,檢視 「 Microsoft 知識庫 」 中的文件:
165194 CreateProcessAsUser() 視窗工作站與桌面

原因 2

系統已用完的桌面堆積。

在系統上的每個桌面物件具有與它相關聯的桌面堆積。桌面物件,用於儲存功能表、 攔截程序、 字串和 windows 堆積。在 Windows Server 2003 和 Windows XP 32 位元,系統會從全系統 48 百萬位元組 (MB) 緩衝區配置的桌面堆積。桌面堆積,除了印表機驅動程式和字型驅動程式也會使用這個緩衝區。

桌面有關聯視窗電台。視窗工作站可以包含零或多個桌面。您可以變更桌面堆集配置給藉由變更下列登錄值關聯視窗工作站的桌面的大小。

注意我們不建議您使用/3GB參數。Boot.ini 檔案中指定/3GB參數。只有 32 位元作業系統支援/3GB參數。
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值是以 kb 為單位指定。有不同的設定相關聯互動式與非互動式視窗工作站的桌面。

注意如果您變更登錄中的SharedSection值時,您必須重新啟動系統,以進行變更才能生效。

重要這個章節、 方法或工作包含修改登錄的步驟。不過,如果您不當修改登錄,可能會發生嚴重的問題。因此,請務必小心執行這些步驟。為加強保護,請在修改前備份登錄。然後,您可以在發生問題時還原登錄。如需有關如何備份和還原登錄的詳細資訊,請按一下下面的文件編號,檢視 「 Microsoft 知識庫 」 中的文件:
322756 如何備份及還原 Windows 中的登錄

第一個的SharedSection值 (1024) 是共用的堆積大小通用於所有的桌上型電腦。這包含全域的控制代碼表。這個資料表視窗、 功能表、 圖示、 游標及等等,會保留控點,且共用的系統設定。也不太可能您會需要變更此值。

第二個SharedSection值是以 「 互動式 」 視窗工作站 WinSta0 相關聯的每個桌面的桌面堆積的大小。使用者物件,例如攔截程序、 功能表和字串及 windows 使用在此的桌面堆積的記憶體。也不太可能您會需要變更此值。

在互動式視窗工作站中建立每個桌面會使用預設桌面堆集為 3072 KB。根據預設,系統會在 Winsta0 中建立下列三個桌面:
  • Winlogon
  • 預設值
    「 預設 」 應用程式桌面會使用"Winsta0\default"指定在STARTUPINFO.lpDesktop結構成員的所有 theprocesses。NULL lpDesktop 結構成員時,視窗工作站和桌面被繼承自父處理序。選取 [允許服務與桌面互動] 啟動選項在 LocalSystem 帳戶下執行的所有服務會都使用"Winsta0\Default"。所有這些處理程序會共用的 「 預設 」 應用程式桌面與相關聯的桌面堆積。
  • 螢幕保護裝置
    顯示螢幕保護裝置時,螢幕保護裝置桌面被建立互動式列舉 (WinSta0) 中。
第三個SharedSection值是以 「 非互動式 」 視窗工作站與相關聯的每個桌面的桌面堆積的大小。如果這個值不存在,非互動式視窗工作站的桌面堆積的大小會與互動式視窗工作站 (也就是第二個SharedSection值) 指定的大小相同。

如果只有兩個SharedSection值都存在,您可以新增第三個值,以指定的桌上型電腦所建立的非互動式視窗工作站的桌面堆積的大小。

每個使用者帳戶下執行的服務處理程序會在非互動式視窗工作站所建立的服務控制管理員 (SCM) 收到新的桌面。因此,每個使用者帳戶下執行的服務會消耗的桌面堆積中的第三個SharedSection值所指定的千位元組數。所有在 LocalSystem 帳戶下執行的服務時允許服務與桌面互動選取的共用的非互動式服務 windows 工作站 (服務-0x0-3e7$) 中的 「 預設 」 桌面的桌面堆積。

總用於互動式與非互動式視窗工作站的桌面堆積必須符合緩衝區。

減少第二個或第三個SharedSection值將增加的數目可以建立相對應的視窗工作站的桌面。攔截程序、 功能表、 字串和 windows 可以在桌面上建立的數目時,會限制較小的值。相反地,增加第二個或第三個SharedSection值將會降低可以建立的桌上型電腦的數目。不過,這也會增加攔截程序、 功能表、 字串和 windows 可以在桌面上建立的數目。

因為 SCM 在非互動式視窗工作站的使用者帳戶下執行每個服務處理程序中建立新的桌面,較大的第三個SharedSection值將會減少可以在系統順利執行的使用者帳號服務。您可以指定為第二個或第三個SharedSection值的最小值為 128。任何嘗試使用較小的值 willinstead 會使用 128。

桌面堆集是由 User32.dll 配置,當處理程序需要使用者物件。如果應用程式不依賴 User32.dll,它不會消耗的桌面堆積。

注意Windows Server 2003 中特定的事件會記錄在系統記錄檔中,發生下列情況之一時:
  • 如果桌面堆集已滿,會記錄下列事件:

    事件類型: 警告
    事件來源: Win32k
    事件類別: 無
    事件識別碼: 243
    日期: 日期
    時間: 時間
    使用者: n/A
    電腦: 伺服器名稱
    描述: 桌面堆集配置失敗。

    在此情況下,增加桌面堆集大小。
  • 如果總桌面堆集變成全系統的緩衝區大小,會記錄下列事件:

    事件類型: 警告
    事件來源: Win32k
    事件類別: 無
    事件識別碼: 244
    日期: 日期
    時間: 時間
    使用者: n/A
    電腦: 伺服器名稱
    描述: 無法建立桌面,因為桌面堆集耗盡。

    在此情況下,減少的桌面堆積大小。
在 Windows Server 2003,全系統緩衝區會是 20 MB,發生下列情況之一時:
  • 您是在終端機服務環境中。
  • Boot.ini 檔案中指定/3GB參數。

警告:本文為自動翻譯

內容

文章識別碼:184802 - 最後檢閱時間:06/14/2015 19:52:00 - 修訂: 1.0

Microsoft Win32 Application Programming Interface

  • kbdll kbkernbase kbprb kbsecurity kbmt KB184802 KbMtzh
意見反應