User32.dll ou Kernel32.dll ne s’initialise pas
Cet article décrit un problème dans lequel une application exécutée par CreateProcess
ou CreateProcessAsUser
peut échouer.
S’applique à : Microsoft Windows
Numéro de la base de connaissances d’origine : 184802
Symptômes
Une application qui est exécutée par CreateProcess
ou CreateProcessAsUser
peut échouer, et vous recevez l’un des messages d’erreur suivants :
Échec de l’initialisation du système> de bibliothèque <dynamique\system32\user32.dll. Le processus se termine anormalement. Échec de l’initialisation du système> de bibliothèque <dynamique\system32\kernel32.dll. Le processus se termine anormalement.
En outre, le processus ayant échoué retourne le code de sortie 128 ou le code suivant :
error :ERROR_WAIT_NO_CHILDREN
Cause
Cet échec se produit pour l’une des raisons suivantes :
Le processus exécuté ne dispose pas d’un accès de sécurité correct à la station de fenêtre et au bureau associés au processus.
Le système n’a plus de tas de bureau.
Plus d’informations
Cause 1
Le processus exécuté ne dispose pas d’un accès de sécurité correct à la station de fenêtre et au bureau associés au processus.
Le membre lpDesktop de la structure STARTUPINFO qui est passé à
CreateProcess
ouCreateProcessAsUser
spécifie la station de fenêtre et le bureau associés au processus exécuté. Le processus exécuté doit disposer d’un accès de sécurité correct à la station de fenêtre et au bureau spécifiés.Cause 2
Le système n’a plus de tas de bureau.
Chaque objet de bureau sur le système a un tas de bureau qui lui est associé. L’objet de bureau utilise le tas pour stocker les menus, les hooks, les chaînes et les fenêtres. Dans Windows Server 2003 et Windows XP 32 bits, le système alloue un tas de bureau à partir d’une mémoire tampon de 48 mégaoctets (Mo) à l’échelle du système. En plus des tas de bureau, les pilotes d’imprimante et les pilotes de police utilisent également cette mémoire tampon.
Les bureaux sont associés à des stations de fenêtre. Une station de fenêtre peut contenir zéro ou plusieurs bureaux. Vous pouvez modifier la taille du tas de bureau alloué à un bureau associé à une station de fenêtre en modifiant la valeur de Registre suivante.
Remarque
Nous vous déconseillons d’utiliser le commutateur /3GB. Le commutateur /3GB est spécifié dans le fichier Boot.ini. Le commutateur /3GB est pris en charge uniquement pour les systèmes d’exploitation 32 bits.
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\SubSystems\Windows
Dans Windows Server 2003 et Windows XP 32 bits, les données par défaut de cette valeur de Registre ressemblent à ce qui suit (le tout sur une seule ligne) :
%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
Dans différentes versions de Windows, les données par défaut de cette valeur de Registre ressemblent à ce qui suit :
Pour Windows Vista RTM (32 bits)
SharedSection=1024,3072,512
Pour Windows Vista SP1, Windows 7, Windows 8, Windows 8.1 (32 bits) et Windows Server 2008 (32 bits)
SharedSection=1024,12288,512
Pour Windows Vista, Windows 7, Windows 8, Windows 8.1 (64 bits), Windows Server 2008, Windows Server 2008 R2, Windows Server 2012 et Windows Server 2012 R2 (64 bits)
SharedSection=1024,20480,768
Les valeurs numériques qui suivent SharedSection=
contrôlent la façon dont le tas de bureau est alloué. Ces SharedSection
valeurs sont spécifiées en kilo-octets. Il existe des paramètres distincts pour les bureaux associés à des stations de fenêtre interactives et non interactives.
Remarque
Si vous modifiez les SharedSection
valeurs dans le Registre, vous devez redémarrer le système pour que les modifications prennent effet.
Importante
Cette section, méthode ou tâche contient des étapes vous indiquant comment modifier le Registre. Toutefois, des problèmes graves peuvent se produire si vous modifiez le Registre de façon incorrecte. Par conséquent, veillez à suivre ces étapes scrupuleusement. Pour une meilleure protection, sauvegardez le registre avant de le modifier. Vous pouvez alors le restaurer en cas de problème. Pour plus d’informations sur la procédure de sauvegarde et de restauration du Registre, consultez l’article Comment sauvegarder et restaurer le Registre dans Windows.
La première SharedSection
valeur (1024) est la taille de tas partagée commune à tous les ordinateurs de bureau. Cela inclut la table de handle globale. Ce tableau contient les handles des fenêtres, des menus, des icônes, des curseurs, etc., ainsi que des paramètres système partagés. Il est peu probable que vous ayez jamais à modifier cette valeur.
La deuxième SharedSection
valeur est la taille du tas de bureau pour chaque bureau associé à la station de fenêtre interactive WinSta0. Les objets utilisateur tels que les hooks, les menus, les chaînes et les fenêtres consomment de la mémoire dans ce tas de bureau. Il est peu probable que vous ayez jamais à modifier cette valeur.
Chaque bureau créé dans la station de fenêtre interactive utilise le tas de bureau par défaut de 3 072 Ko. Par défaut, le système crée les trois bureaux suivants dans Winsta0 :
Winlogon
Par défaut
Le bureau de l’application par défaut sera utilisé par tous les processus pour lesquels
Winsta0\default
est spécifié dans le membre de structure STARTUPINFO.lpDesktop. Lorsque le membre de structure lpDesktop a la valeur NULL, la station de fenêtre et le bureau sont hérités du processus parent. Tous les services exécutés sous le compte LocalSystem avec l’option Autoriser le service à interagir avec le bureau de démarrage sélectionnée utilisentWinsta0\Default
. Tous ces processus partageront le tas de bureau associé au bureau d’application par défaut.Écran de veille
Le bureau de l’économiseur d’écran est créé dans la station de fenêtre interactive (WinSta0) lorsqu’un économiseur d’écran est affiché.
La troisième valeur SharedSection correspond à la taille du tas de bureau pour chaque bureau associé à une station de fenêtre non interactive. Si cette valeur n’est pas présente, la taille du tas de bureau pour les stations de fenêtre non interactives sera identique à la taille spécifiée pour les stations de fenêtre interactives (autrement dit, la deuxième valeur SharedSection).
Si seules deux valeurs SharedSection sont présentes, vous pouvez ajouter une troisième valeur pour spécifier la taille du tas de bureau pour les bureaux créés dans des stations de fenêtre non interactives.
Chaque processus de service exécuté sous un compte d’utilisateur reçoit un nouveau bureau dans une station de fenêtre non interactive créée par le Gestionnaire de contrôle de service (SCM). Par conséquent, chaque service exécuté sous un compte d’utilisateur consomme le nombre de kilo-octets de tas de bureau spécifié dans la troisième valeur SharedSection. Tous les services exécutés sous le compte LocalSystem lorsque l’option Autoriser le service à interagir avec le bureau n’est pas sélectionnée partagent le segment de bureau du Bureau par défaut dans la station windows de service non interactive (Service-0x0-3e7$).
Le tas de bureau total utilisé dans les stations de fenêtres interactives et non interactives doit tenir dans la mémoire tampon.
La diminution de la deuxième ou troisième valeur SharedSection augmente le nombre de bureaux qui peuvent être créés dans les stations de fenêtre correspondantes. Des valeurs plus petites limitent le nombre de hooks, de menus, de chaînes et de fenêtres qui peuvent être créés dans un bureau. En revanche, l’augmentation de la deuxième ou troisième valeur SharedSection réduit le nombre de bureaux qui peuvent être créés. Toutefois, cela augmente également le nombre de hooks, de menus, de chaînes et de fenêtres qui peuvent être créés dans un bureau.
Étant donné que le SCM crée un bureau dans la station de fenêtre non interactive pour chaque processus de service qui s’exécute sous un compte d’utilisateur, une troisième valeur SharedSection supérieure réduit le nombre de services de compte d’utilisateur qui peuvent s’exécuter correctement sur le système. La valeur minimale pouvant être spécifiée pour la deuxième ou troisième valeur SharedSection est 128. Toute tentative d’utilisation d’une valeur plus petite utilise à la place 128.
Le tas de bureau est alloué par User32.dll lorsqu’un processus a besoin d’objets utilisateur. Si une application n’est pas dépendante de User32.dll, elle ne consomme pas le tas de bureau.
Remarque
Dans Windows Server 2003, l’événement spécifique est enregistré dans le journal système lorsque l’une des conditions suivantes est remplie :
Si le tas du bureau devient plein, l’événement suivant est journalisé :
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.
Dans ce cas, augmentez la taille du tas du bureau.
Si le tas de bureau total devient la taille de mémoire tampon à l’échelle du système, l’événement suivant est journalisé :
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.
Dans ce cas, diminuez la taille du tas du bureau.
Dans Windows Server 2003, une mémoire tampon à l’échelle du système est de 20 Mo lorsque l’une des conditions suivantes est remplie :
- Vous êtes dans un environnement des services Terminal Server.
- Le commutateur /3GB est spécifié dans le fichier Boot.ini.
S’applique à
- Microsoft Windows XP Professionnel
- Microsoft Windows XP Édition familiale
- Windows Vista Édition Intégrale
- Windows Vista Entreprise
- Windows Vista Professionnel
- Windows Vista Édition Familiale Premium
- Windows 7 Ultimate
- Windows 7 Entreprise
- Windows 7 Professionnel
- Windows 7 Édition Familiale Premium
- Windows 8 Entreprise
- Windows 8 Professionnel, Windows 8
- Windows 8.1 Entreprise
- Windows 8.1 Professionnel
- Windows 8.1
- Microsoft Windows Server 2003 Datacenter Edition (32 bits x86)
- Microsoft Windows Server 2003 Datacenter x64 Edition
- Microsoft Windows Server 2003 Êdition Entreprise (x86 32 bits)
- Microsoft Windows Server 2003 Enterprise x64 Edition
- Microsoft Windows Server 2003 Standard Edition (x86 32 bits)
- 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 R2Centre de données
- Windows Server 2012 R2 Standard
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour