Windows Server 2019 → 2022 : corriger le blocage à 87 % de l’upgrade in‑place (MigHost, ntdll.dll 0xC0000409)

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.

Sommaire

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

PisteObservations importantes
Incompatibilités logiciellesApplications 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ètesUn pilote bloqué à l’étape SafeOS provoque souvent un échec entre 80‑90 % (filtre stockage, HBA/RAID, GPU, NIC).
Espace disque insuffisantPeut interrompre l’extraction/copie des fichiers ou la création de Windows.old.
Sécurité et antivirusCertains agents AV/EDR injectent des DLL ou verrouillent des fichiers, empêchant la mise à niveau.
Problème mémoire ou corruption système0xC0000409 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)

ÉtapeDétail
Examiner les journaux SetupDiagTé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 litigieuxRetirer versions obsolètes de Visual C++ Redistributable ; désinstaller temporairement pilotes/logiciels non critiques (RAID, monitoring, anti‑malware).
Mettre l’ISO à jourRecré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/BIOSMettre à jour le firmware ; désactiver temporairement Secure Boot/TPM si non requis.
Santé du disque et de la mémoireContrôler le SMART, exécuter chkdsk /scan ; tester la RAM avec un outil hors OS (ex. MemTest).
Migration parallèleSi 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 MicrosoftPour 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 à niveauCe qui se passe réellementDéfaillances habituelles
0‑30 %DownlevelPré‑copies, vérifs de compatibilité, téléchargement des updates dynamiquesPlace disque, applis bloquantes, KB manquantes
30‑70 %SafeOSBoot dans un environnement mini‑OS, application des pilotes et du noyauPilotes stockage/RAID, filtres antivirus
70‑90 %Transition SafeOS/First‑BootMigration des données et paramètres (MigHost)Crash MigHost, ntdll.dll 0xC0000409
90‑100 %First‑Boot / Second‑BootFinalisation, drivers restants, OOBEServices 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 avec ntdll.dll, exception 0xC0000409.
  • Dans setupact.log / setuperr.log : messages “Failure during data migration” ou “Unhandled exception in MigHost”.

Diagnostic express (10 à 20 minutes)

  1. 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\*.*
  2. Exécuter SFC/DISM : sfc /scannow dism /online /cleanup-image /scanhealth dism /online /cleanup-image /restorehealth
  3. 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.
  4. Lancer SetupDiag et noter la phase exacte + l’artefact fautif (driver, service, package).

Analyse approfondie des journaux

Où trouver les logs qui comptent

CheminContenuQuand regarder
C:\$WINDOWS.~BT\Sources\Panther\setupact.log, setuperr.log, journaux de compatibilitéToujours
C:\Windows\Panther\Journaux hérités de l’étape downlevelAvant reboot vers SafeOS
C:\$WINDOWS.~BT\Sources\Rollback\Pourquoi le système a annulé l’upgradeAprès échec et retour à 2019
Observateur d’événements → Windows Logs / ApplicationCrash MigHost.exe, ntdll.dll, bucket WERAu 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 les UninstallString obsolètes (test en pré‑prod recommandé).

Pilotes et firmware (échecs typiques en SafeOS)

  1. 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.).
  2. Mettre à jour/retirer temporairement les pilotes non critiques (GPU, outils agentless, utilitaires HBA).
  3. 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 :

  1. Basculer l’agent en passthrough/mode maintenance.
  2. Désinstaller complètement pour tester.
  3. Re‑installer après réussite et valider la compatibilité 2022.

Corruption système et 0xC0000409 dans ntdll.dll

  1. Exécuter SFC et DISM (vu plus haut).
  2. Vérifier la RAM : mdsched.exe (redémarrage) puis, si besoin, un test hors OS prolongé.
  3. 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 :

  1. 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
  2. Monter l’image (choisir l’index correspondant à l’édition Standard) : dism /Mount-Image /ImageFile:D:\sources\install.wim /Index:1 /MountDir:C:\Mount\WS2022
  3. Intégrer le LCU et/ou SSU (.cab locaux) : dism /Add-Package /Image:C:\Mount\WS2022 /PackagePath:C:\Updates\KB<LCU>.cab
  4. 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

  1. Exécuter SetupDiag → noter Phase et l’artefact fautif.
  2. Si pilote listé : mettre à jour depuis l’OEM ou retirer temporairement (pnputil /delete-driver si possible hors SafeOS).
  3. Si service/app : désinstaller, purger entrées de démarrage, redémarrer.

Relance contrôlée

  1. Lancer l’upgrade avec /dynamicupdate disable et /copylogs.
  2. Si nouvel échec : récupérer C:\Upgrade\Logs + C:\Dumps, ajuster.
  3. 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é

  1. Déployer un serveur Windows Server 2022 propre (même domaine/VLAN si possible).
  2. Installer rôles/fonctionnalités équivalents.
  3. 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.
  4. Basculer les enregistrements DNS, tests, bacs à sable, puis mise en production.
  5. 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 prioritaireAction immédiate
Blocage 80‑90 % + rollbackPilote SafeOSSetupDiag → identifier pilote → mettre à jour/retirer
Crash MigHost 0xC0000409Injection DLL / débordement de pileDésinstaller EDR/AV + LocalDumps → réessai
Échec immédiat downlevelAppli incompatible / manque d’espaceDésinstallation + libération espace + relance
Échecs aléatoiresRAM/disque incertainsmdsched, 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

  1. Collecter et analyser SetupDiag pour cibler précisément la phase d’échec et l’artefact fautif.
  2. Mettre à jour ou retirer tout pilote/app incompatible détecté (priorité : stockage/RAID, EDR/AV, outils OEM).
  3. Assainir la pile système : SFC + DISM, espace disque, vérifs disque/RAM ; puis retenter avec une ISO mise à jour et /copylogs.
  4. 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.

Sommaire