Vous tentez de migrer Windows Server 2019 Standard vers 2022 Standard et l’assistant se ferme à 87 % ? Suivez ce guide pas‑à‑pas, centré sur le crash MigHost/ntdll.dll
(0xC0000409), pour diagnostiquer précisément et rétablir une mise à niveau in‑place fiable.
Résumé technique de la session
Problématique
Une mise à niveau in‑place de Windows Server 2019 Standard vers Windows Server 2022 Standard se bloque systématiquement à 87 % puis se ferme. Les journaux Panther montrent l’arrêt inattendu du processus MigHost. L’Observateur d’événements (Application) consigne un crash dans ntdll.dll
avec le code d’exception 0xC0000409 (dépassement de pile).
Indices et causes possibles relevés
Piste | Observations importantes |
---|---|
Incompatibilités logicielles | Applications ou services non pris en charge sous 2022 (agents EDR, logiciels de sauvegarde, drivers RAID/outils OEM, filtres système, anciens Runtime VC++). |
Pilotes / microprogramme obsolètes | Un pilote bloqué à l’étape SafeOS provoque souvent un échec entre 80‑90 % (filtre stockage, HBA/RAID, GPU, NIC). |
Espace disque insuffisant | Peut interrompre l’extraction/copie des fichiers ou la création de Windows.old. |
Sécurité et antivirus | Certains agents AV/EDR injectent des DLL ou verrouillent des fichiers, empêchant la mise à niveau. |
Problème mémoire ou corruption système | 0xC0000409 dans ntdll.dll pointe vers un débordement de pile ou des DLL corrompues, parfois déclenché par un module tiers. |
Solutions déjà tentées pendant la session
- Vérification de la compatibilité des applications, rôles et fonctionnalités.
- Mise à jour Windows Server 2019 (SSU + LCU) et pilotes.
- Désactivation temporaire antivirus, pare‑feu, agents de sauvegarde.
- Contrôle de l’espace disque libre sur la partition système.
- Exécution de l’outil de dépannage de mise à niveau intégré.
- Analyse mémoire (
mdsched
) et réparation SFC (sfc /scannow
). - Démarrage minimal (clean boot) pour éliminer les services tiers.
Malgré ces actions, le blocage persiste.
Recommandations complémentaires (vue d’ensemble)
Étape | Détail |
---|---|
Examiner les journaux SetupDiag | Télécharger SetupDiag.exe et l’exécuter ; corrèle setuperr.log , setupact.log , mini‑dumps MigHost pour identifier la phase exacte : Downlevel, SafeOS, First‑Boot, Second‑Boot. |
Désinstaller / mettre à jour les composants litigieux | Retirer versions obsolètes de Visual C++ Redistributable ; désinstaller temporairement pilotes/logiciels non critiques (RAID, monitoring, anti‑malware). |
Mettre l’ISO à jour | Recréer un média Windows Server 2022 intégrant le dernier LCU via DISM /Add-Package pour éviter des incompatibilités connues. |
Vérifier UEFI/BIOS | Mettre à jour le firmware ; désactiver temporairement Secure Boot/TPM si non requis. |
Santé du disque et de la mémoire | Contrôler le SMART, exécuter chkdsk /scan ; tester la RAM avec un outil hors OS (ex. MemTest). |
Migration parallèle | Si l’in‑place échoue toujours, préparer un serveur 2022 propre, réinstaller rôles/fonctionnalités, migrer données et services (Storage Migration Service, robocopy , sauvegarde/restauration). |
Support Microsoft | Pour analyser les dumps MigHost et des journaux internes, ouvrir un ticket Premier/Pro. |
Comprendre où et pourquoi l’upgrade casse
Correspondance “pourcentage ≠ phase de Setup”
La barre de progression n’est pas linéaire. Autour de 80‑90 %, on se situe souvent au moment des transitions SafeOS → First‑Boot ou dans la fin de SafeOS, là où des pilotes et filtres s’injectent.
Fenêtre de progression (indicative) | Phase de mise à niveau | Ce qui se passe réellement | Défaillances habituelles |
---|---|---|---|
0‑30 % | Downlevel | Pré‑copies, vérifs de compatibilité, téléchargement des updates dynamiques | Place disque, applis bloquantes, KB manquantes |
30‑70 % | SafeOS | Boot dans un environnement mini‑OS, application des pilotes et du noyau | Pilotes stockage/RAID, filtres antivirus |
70‑90 % | Transition SafeOS/First‑Boot | Migration des données et paramètres (MigHost) | Crash MigHost , ntdll.dll 0xC0000409 |
90‑100 % | First‑Boot / Second‑Boot | Finalisation, drivers restants, OOBE | Services tiers, GPO agressives, pilotes résiduels |
Symptômes typiques autour de 87 %
- Échec silencieux suivi d’un redémarrage et retour à 2019.
- Événement Application Error pour
MigHost.exe
avecntdll.dll
, exception0xC0000409
. - Dans
setupact.log
/setuperr.log
: messages “Failure during data migration” ou “Unhandled exception in MigHost”.
Diagnostic express (10 à 20 minutes)
- Contrôler l’espace disque : viser ≥ 20 Go libres sur C: (≥ 32 Go si rôles volumineux). Nettoyer WinSxS et Temp si nécessaire :
dism /online /cleanup-image /startcomponentcleanup /resetbase del /q /s %SystemRoot%\Temp\*.*
- Exécuter SFC/DISM :
sfc /scannow dism /online /cleanup-image /scanhealth dism /online /cleanup-image /restorehealth
- Désactiver les agents de sécurité et logiciels non essentiels (désinstallation de préférence, sinon arrêt + StartupType = Disabled), puis redémarrer.
- Lancer SetupDiag et noter la phase exacte + l’artefact fautif (driver, service, package).
Analyse approfondie des journaux
Où trouver les logs qui comptent
Chemin | Contenu | Quand regarder |
---|---|---|
C:\$WINDOWS.~BT\Sources\Panther\ | setupact.log , setuperr.log , journaux de compatibilité | Toujours |
C:\Windows\Panther\ | Journaux hérités de l’étape downlevel | Avant reboot vers SafeOS |
C:\$WINDOWS.~BT\Sources\Rollback\ | Pourquoi le système a annulé l’upgrade | Après échec et retour à 2019 |
Observateur d’événements → Windows Logs / Application | Crash MigHost.exe , ntdll.dll , bucket WER | Au moment de l’échec |
Exécuter SetupDiag de manière utile
Copiez SetupDiag.exe
sur le serveur (bureau ou C:\Tools
), puis :
mkdir C:\Upgrade\Diag
SetupDiag.exe /Output:C:\Upgrade\Diag\SetupDiagResults.log /Format:Json
type C:\Upgrade\Diag\SetupDiagResults.log
Interprétez :
- Phase : SafeOS, First‑Boot, etc.
- RuleId / Failure Bucket : mot‑clé du pattern détecté (pilote, pack, service).
- Fichier/Driver : nom du pilote (
.sys
) ou composant incriminé.
Capturer un mini‑dump de MigHost
Pour figer la cause d’un crash récalcitrant, activez des LocalDumps pour MigHost.exe
:
reg add "HKLM\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps\MigHost.exe" /v DumpFolder /t REG_EXPAND_SZ /d "C:\Dumps" /f
reg add "HKLM\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps\MigHost.exe" /v DumpType /t REG_DWORD /d 2 /f
reg add "HKLM\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps\MigHost.exe" /v DumpCount /t REG_DWORD /d 10 /f
mkdir C:\Dumps
Relancez l’upgrade ; à l’échec, un .dmp
sera généré dans C:\Dumps
pour une analyse avancée.
Corrections ciblées par scénario
Incompatibilités logicielles (EDR, sauvegarde, monitoring, outils OEM)
- Désinstaller (préférable) plutôt que désactiver. Gardez la clé/licence sous la main.
- Nettoyer les services résiduels :
Get-Service | Where-Object { $_.DisplayName -match "Symantec|McAfee|Trend|Sentinel|CrowdStrike|Defender for Endpoint|Veeam|Acronis|HP|Dell|Intel|NVIDIA" } ` | ForEach-Object { Stop-Service $_ -Force -ErrorAction SilentlyContinue; Set-Service $_ -StartupType Disabled }
- Supprimer les anciens Visual C++ Redistributable :
Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*, HKLM:\Software\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\* ` | Where-Object { $_.DisplayName -like "*Visual C++*" } ` | Select-Object DisplayName, DisplayVersion, Publisher, UninstallString | Format-Table -Auto
Exécutez prudemment lesUninstallString
obsolètes (test en pré‑prod recommandé).
Pilotes et firmware (échecs typiques en SafeOS)
- Lister les pilotes tiers :
pnputil /enum-drivers > C:\Upgrade\Diag\drivers.txt
Repérer les versions très anciennes (Date/Provider) et les filtres de stockage (iaStor*.sys
,lsi_sas*.sys
,hpt*.sys
,fltsrv.sys
, etc.). - Mettre à jour/retirer temporairement les pilotes non critiques (GPU, outils agentless, utilitaires HBA).
- Mettre à jour le BIOS/UEFI depuis l’OEM, puis re‑tester. En cas de doute, désactiver temporairement Secure Boot si vos politiques le tolèrent.
Espace disque & intégrité NTFS
- Vérifier et libérer :
fsutil volume diskfree C: cleanmgr /sageset:1 & cleanmgr /sagerun:1 chkdsk C: /scan
- Éviter les profils utilisateurs géants : déplacez temporairement des caches/bibliothèques volumineux.
Sécurité et antivirus
Les EDR/AV insèrent des hooks pouvant faire déborder la pile de MigHost
. Stratégie recommandée :
- Basculer l’agent en passthrough/mode maintenance.
- Désinstaller complètement pour tester.
- Re‑installer après réussite et valider la compatibilité 2022.
Corruption système et 0xC0000409 dans ntdll.dll
- Exécuter SFC et DISM (vu plus haut).
- Vérifier la RAM :
mdsched.exe
(redémarrage) puis, si besoin, un test hors OS prolongé. - Surveiller les Event ID 1000/1001 autour du crash pour identifier la pile d’appels et les modules tiers.
Média d’installation 2022 « assaini »
Un média à jour (slipstream) élimine de nombreux problèmes. Exemples :
- Monter/extraire l’ISO 2022 sur
D:\
et préparer un répertoire de montage :dism /Get-WimInfo /WimFile:D:\sources\install.wim mkdir C:\Mount\WS2022
- Monter l’image (choisir l’index correspondant à l’édition Standard) :
dism /Mount-Image /ImageFile:D:\sources\install.wim /Index:1 /MountDir:C:\Mount\WS2022
- Intégrer le LCU et/ou SSU (
.cab
locaux) :dism /Add-Package /Image:C:\Mount\WS2022 /PackagePath:C:\Updates\KB<LCU>.cab
- Valider et démonter :
dism /Unmount-Image /MountDir:C:\Mount\WS2022 /Commit
Vous pouvez lancer la mise à niveau directement depuis le dossier mis à jour (sans re‑générer d’ISO) :
D:\setup.exe
Lancer l’upgrade en mode « déterministe »
Évitez les variables externes en désactivant temporairement les mises à jour dynamiques et en copiant les journaux :
D:\setup.exe /auto upgrade /dynamicupdate disable /copylogs C:\Upgrade\Logs /showoobe none
/dynamicupdate disable
: garde un contexte constant pendant vos tests./copylogs
: centralise les logs même en cas de rollback.
Si l’upgrade réussit dans ce mode, réessayez ensuite avec les mises à jour dynamiques activées pour sécuriser l’état final.
Procédure pas à pas recommandée
Pré‑flight technique
- Sauvegarde vérifiée (système + données + État du système si DC).
- Inventaire des rôles / fonctionnalités (
Get-WindowsFeature | ? Installed
). - Inventaire applications :
wmic product get name,version
(ou export via PowerShell). - Nettoyage composant store :
dism /online /cleanup-image /startcomponentcleanup
.
Isolation des tiers
- Clean boot : msconfig → masquer services Microsoft → désactiver le reste.
- Désinstaller EDR, agents de sauvegarde et outils OEM connus pour s’insérer au niveau noyau.
Vérifications disque/mémoire
chkdsk /scan
sur toutes les partitions système/boot.- SMART « Prudence » → planifier un remplacement de disque avant l’upgrade.
Exécution de SetupDiag et corrections
- Exécuter SetupDiag → noter Phase et l’artefact fautif.
- Si pilote listé : mettre à jour depuis l’OEM ou retirer temporairement (
pnputil /delete-driver
si possible hors SafeOS). - Si service/app : désinstaller, purger entrées de démarrage, redémarrer.
Relance contrôlée
- Lancer l’upgrade avec
/dynamicupdate disable
et/copylogs
. - Si nouvel échec : récupérer
C:\Upgrade\Logs
+C:\Dumps
, ajuster. - Si réussite : réinstaller les tiers, réactiver Secure Boot/TPM, valider.
Quand choisir la migration parallèle
Si, après 2‑3 itérations, l’in‑place reste instable, la migration latérale réduit le risque et le temps d’indisponibilité.
Plan simplifié
- Déployer un serveur Windows Server 2022 propre (même domaine/VLAN si possible).
- Installer rôles/fonctionnalités équivalents.
- Migrer la configuration :
- Partages/permissions :
robocopy
+ export/import des ACL. - Serveur de fichiers : Storage Migration Service.
- Sites IIS :
appcmd
ou export de configuration. - Impression : Outil de migration d’imprimantes / Export‑Import.
- Partages/permissions :
- Basculer les enregistrements DNS, tests, bacs à sable, puis mise en production.
- Conserver l’ancien serveur en lecture seule quelques jours, puis retrait.
Exemple Robocopy robuste
robocopy D:\Données \\Srv2022\D$\Données /MIR /COPY:DATSO /DCOPY:T /R:3 /W:5 /MT:16 /LOG+:C:\Logs\robo.log
Annexes utiles
Script d’aspiration des preuves
Collecte des logs Panther, journaux d’échec et pilotes dans un ZIP.
$dest = "C:\Upgrade\Collect-" + (Get-Date -Format "yyyyMMdd-HHmmss")
New-Item -Path $dest -ItemType Directory -Force | Out-Null
$paths = @(
"C:\Windows\Panther",
"C:\$WINDOWS.~BT\Sources\Panther",
"C:\$WINDOWS.~BT\Sources\Rollback",
"C:\Windows\inf\setupapi.dev.log"
)
foreach($p in $paths){ if(Test-Path $p){ Copy-Item $p -Recurse -Force $dest } }
pnputil /enum-drivers > "$dest\drivers.txt"
wevtutil epl Application "$dest\Application.evtx" /q:"*[System[(EventID=1000 or EventID=1001)]]"
Compress-Archive -Path $dest -DestinationPath "$dest.zip"
Table de décision rapide
Signal observé | Hypothèse prioritaire | Action immédiate |
---|---|---|
Blocage 80‑90 % + rollback | Pilote SafeOS | SetupDiag → identifier pilote → mettre à jour/retirer |
Crash MigHost 0xC0000409 | Injection DLL / débordement de pile | Désinstaller EDR/AV + LocalDumps → réessai |
Échec immédiat downlevel | Appli incompatible / manque d’espace | Désinstallation + libération espace + relance |
Échecs aléatoires | RAM/disque incertains | mdsched , SMART , chkdsk /scan |
Bonnes pratiques post‑migration
- Réactiver et mettre à jour les agents de sécurité.
- Valider tous les rôles (IIS/DHCP/DNS/Print/FS) avec des health checks dédiés.
- Capturer une image de référence (sauvegarde complète).
- Documenter précisément version de l’édition, LCU final, pilotes installés (
pnputil /enum-drivers
).
Points d’attention par rôle
- Contrôleur de domaine : privilégier l’introduction d’un nouveau DC 2022 et la promotion plutôt qu’une mise à niveau in‑place directe. Vérifier la réplication et les niveaux fonctionnels avant toute opération.
- Serveur Hyper‑V : planifier une fenêtre ; arrêter/migrer les VM ; vérifier la compatibilité des extensions de switch virtuel.
- Serveur de fichiers : tester SMB, casses de case/ACL, et VoV (Verrouillage opportuniste) après migration.
- IIS : exporter/importer la configuration (
appcmd add backup
/restore
), confirmer les versions .NET et mappages Handler.
FAQ condensée
Le passage de 2019 à 2022 conserve‑t‑il mes rôles ?
Oui, si la mise à niveau réussit. En cas d’échec répété, préférez une migration parallèle pour garder la maîtrise du risque.
Faut‑il désactiver Secure Boot ?
Non par défaut. Faites‑le seulement pour diagnostiquer un conflit de pilote/boot, puis réactivez‑le.
Dois‑je laisser “Dynamic Update” actif ?
Pour les tests, désactivez‑le pour un contexte stable. Pour la bascule finale, laissez‑le actif ou utilisez un média slipstreamé récent.
Synthèse opérationnelle
- Collecter et analyser SetupDiag pour cibler précisément la phase d’échec et l’artefact fautif.
- Mettre à jour ou retirer tout pilote/app incompatible détecté (priorité : stockage/RAID, EDR/AV, outils OEM).
- Assainir la pile système : SFC + DISM, espace disque, vérifs disque/RAM ; puis retenter avec une ISO mise à jour et
/copylogs
. - Si l’in‑place échoue encore, planifier une migration latérale (nouveau 2022 propre) pour éviter une indisponibilité prolongée.
Récapitulatif exécutable
Copiez/collez ces blocs dans un elevated prompt selon vos besoins.
:: Préparer
mkdir C:\Upgrade\Diag
dism /online /cleanup-image /startcomponentcleanup /resetbase
sfc /scannow
:: Journaux et pilotes
SetupDiag.exe /Output:C:\Upgrade\Diag\SetupDiagResults.log /Format:Json
pnputil /enum-drivers > C:\Upgrade\Diag\drivers.txt
:: LocalDumps MigHost
reg add "HKLM\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps\MigHost.exe" /v DumpFolder /t REG_EXPAND_SZ /d "C:\Dumps" /f
reg add "HKLM\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps\MigHost.exe" /v DumpType /t REG_DWORD /d 2 /f
mkdir C:\Dumps
:: Upgrade en mode déterministe
D:\setup.exe /auto upgrade /dynamicupdate disable /copylogs C:\Upgrade\Logs /showoobe none
Conclusion
Un échec à 87 % avec MigHost
et ntdll.dll
0xC0000409 évoque très fréquemment un conflit de pilote ou de filtre noyau lors de la transition SafeOS → First‑Boot. En combinant SetupDiag, un média 2022 slipstreamé, la désinstallation des tiers les plus intrusifs et une exécution de SFC/DISM, vous maximisez vos chances de succès. Au‑delà de deux itérations infructueuses, la migration parallèle apporte une voie de sortie sûre et prévisible.