PRB: L'inizializzazione di User32.dll o Kernel32.dll non riesce

Traduzione articoli Traduzione articoli
Identificativo articolo: 184802 - Visualizza i prodotti a cui si riferisce l?articolo.
IMPORTANTE: in questo articolo sono contenute informazioni su come modificare il Registro di sistema. Prima di modificare il Registro di sistema, eseguire una copia di backup e assicurarsi di sapere come ripristinarlo in caso di problemi. Per ulteriori informazioni su come eseguire il backup, ripristinare e modificare il Registro di sistema, fare clic sul numero dell'articolo della Microsoft Knowledge Base riportato di seguito:
256986 Description of the Microsoft Windows Registry
Espandi tutto | Chiudi tutto

In questa pagina

Sintomi

A volte un'applicazione eseguita da CreateProcess() o da CreateProcessAsUser() non ha esito positivo e viene visualizzato un messaggio di errore analogo a uno dei seguenti:
Inizializzazione della libreria di collegamento dinamico <sistema>\system32\user32.dll non riuscita. Il processo Ŕ stato terminato in modo anomalo.
Inizializzazione della libreria di collegamento dinamico <sistema>\system32\kernel32.dll non riuscita. Il processo Ŕ stato terminato in modo anomalo.
Il processo non riuscito restituisce il codice di uscita 128 oppure
ERROR_WAIT_NO_CHILDREN

Cause

Questo problema Ŕ causato da uno dei due seguenti scenari:
  1. Il processo eseguito non dispone della corretta protezione di accesso alla postazione e al desktop associati al processo stesso.
  2. Il sistema non dispone di heap del desktop.

Informazioni

Causa 1

Il processo eseguito non dispone della corretta protezione di accesso alla postazione e al desktop associati al processo stesso.

Il membro lpDesktop della struttura STARTUPINFO passato a CreateProcess() o a CreateProcessAsUser() specifica quale postazione e desktop sono associati al processo in esecuzione. Il processo in esecuzione deve disporre della corretta protezione di accesso per la postazione e per il desktop specificati.

Per ulteriori informazioni sulla risoluzione di problemi di protezione con postazioni e desktop, fare clic sul numero dell'articolo della Microsoft Knowledge Base riportato di seguito:
165194 INFO: CreateProcessAsUser() Windowstations and Desktops

Causa 2

Il sistema non dispone di heap del desktop.

Ciascun oggetto del desktop nel sistema dispone di un heap del desktop associato. L'oggetto del desktop utilizza l'heap per memorizzare menu, hook, stringhe e finestre. Gli heap del desktop vengono allocati dal sistema grazie a un buffer a livello di sistema di 48 MB. Oltre che dagli heap del desktop, questo buffer viene utilizzato da stampanti e da driver dei caratteri.

I desktop sono associati a delle postazioni. Una postazione pu˛ contenere zero o pi¨ desktop. La dimensione dell'heap del desktop allocata per un desktop associato a una postazione pu˛ essere modificata nel seguente valore di registro:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\SubSystems\Windows
I dati predefiniti per questo valore di registro avranno un aspetto simile al seguente (in un'unica riga):
   %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
				
I valori numerici che seguono "SharedSection=" consentono di controllare l'allocazione dell'heap del desktop. Questi valori SharedSection vengono specificati in kilobyte (KB). Vi sono impostazioni separate per desktop associati a postazioni interattive e non interattive.

NOTA: se i valori SharedSection nel Registro di sistema vengono modificati, le modifiche avranno effetto al successivo riavvio del sistema.

AVVISO: l'errato utilizzo dell'editor del Registro di sistema pu˛ causare gravi problemi che potrebbero richiedere la reinstallazione del sistema operativo. Microsoft non Ŕ in grado di garantire la risoluzione di problemi causati dall'errato utilizzo dell'editor del Registro di sistema. L'utilizzo dell'editor del Registro di sistema Ŕ a rischio e pericolo dell'utente.


Il primo valore SharedSection (1024) Ŕ la dimensione dell'heap condiviso comune a tutti i desktop. Questo include la tabella degli handle globali, che include gli handle per finestre, menu, icone, cursori e cosý via, e impostazioni di sistema condivise. ╚ improbabile che sia mai necessario modificare questo valore.

Il secondo valore SharedSection (3072) Ŕ la dimensione dell'heap del desktop per ciascun desktop associato alla postazione "interattiva" WinSta0. Oggetti utente quali hook, menu, stringhe e finestre consumano memoria allocata in questo heap del desktop. ╚ improbabile che sia mai necessario modificare questo secondo valore SharedSection.

Ciascun desktop creato nella postazione interattiva utilizza l'heap del desktop predefinito di 3072 KB. Per impostazione predefinita vi sono tre desktop creati dal sistema in Winsta0:
  • Winlogon
  • Default - Il desktop dell'applicazione predefinita verrÓ utilizzato da tutti i processi per i quali Ŕ specificato "Winsta0\default" nel membro della struttura STARTUPINFO.lpDesktop. Quando il membro della struttura lpDesktop Ŕ NULL, la postazione e il desktop vengono ereditati dal processo padre. Tutti i servizi eseguiti con l'account LocalSystem con l'opzione di avvio Consenti al servizio di interagire col desktop selezionata utilizzeranno "Winsta0\Default". Tutti questi processi condividono lo stesso heap associato al desktop dell'applicazione predefinita.
  • Screen-saver - Il desktop dello screen saver viene creato nella postazione interattiva (WinSta0) quando viene visualizzato uno screen saver.
Il terzo valore SharedSection (512) Ŕ la dimensione dell'heap del desktop per ciascun desktop associato a una postazione "non interattiva". Se questo valore non Ŕ presente, la dimensione dell'heap del desktop per postazioni non interattive sarÓ pari alla dimensione specificata per postazioni interattive (secondo valore SharedSection).

Se sono presenti solo due valori SharedSection, Ŕ possibile aggiungere ",512" come terzo valore per specificare la dimensione dell'heap per desktop creati in postazioni non interattive.

Ciascun processo di servizio eseguito da un certo account riceverÓ un nuovo desktop in una postazione non interattiva creata da Gestione controllo servizi (SCM). Di conseguenza, ciascun servizio eseguito da un account utente consumerÓ il numero di kilobyte di heap del desktop specificati dal terzo valore SharedSection. Tutti i servizi eseguiti dall'account LocalSystem con Consenti al servizio di interagire col desktop non selezionato, condividono l'heap del desktop "predefinito" nella postazione del servizio non interattivo (Service-0x0-3e7$).

L'heap del desktop totale utilizzato nelle postazioni interattive e non interattive deve poter essere contenuto nel buffer totale di sistema di 48 MB.

La riduzione del secondo o del terzo valore SharedSection comporta l'aumento del numero di desktop che possono essere creati nelle corrispondenti postazioni. Valori pi¨ bassi limiteranno il numero di hook, menu, stringhe e finestre che potranno essere creati all'interno di un desktop. Al contrario, l'aumento del secondo o del terzo valore SharedSection determinerÓ la riduzione del numero di desktop possibili ma aumenterÓ il numero di hook, menu, stringhe e finestre che potranno essere creati all'interno di ciascun desktop.

GiacchÚ il gestore controllo servizi crea un nuovo desktop nella postazione non interattiva per ciascun processo in esecuzione da un account utente, un valore di desktop pi¨ alto come terzo valore SharedSection ridurrÓ il numero di servizi di account utente che pu˛ essere eseguito correttamente sul sistema. Il valore minimo che pu˛ essere specificato per il secondo o terzo valore SharedSection Ŕ 128. Qualsiasi numero immesso inferiore a tale valore verrÓ corretto e riportato automaticamente a 128.

L'heap del desktop viene allocato da User32.dll quando un processo necessita di oggetti utente. Le applicazioni che non dipendono da User32.dll non consumano heap del desktop.

ProprietÓ

Identificativo articolo: 184802 - Ultima modifica: mercoledý 8 ottobre 2003 - Revisione: 4.1
Le informazioni in questo articolo si applicano a
  • Microsoft Win32 Application Programming Interfaceáalle seguenti piattaforme
    • Microsoft Windows NT Workstation 4.0 Developer Edition
    • Microsoft Windows NT Server 4.0, Terminal Server Edition
    • Microsoft Windows NT Server 4.0 Standard Edition
    • Microsoft Windows XP Tablet PC Edition
    • Microsoft Windows XP Professional
    • Microsoft Windows XP Media Center Edition
    • Microsoft Windows XP Home Edition
    • Microsoft Windows 2000 Advanced Server
    • Microsoft Windows 2000 Datacenter Server
    • Microsoft Windows 2000 Professional Edition
    • Microsoft Windows 2000 Server
Chiavi:á
kbdll kbkernbase kbsecurity kbprb KB184802
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.

Invia suggerimenti

 

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