Accéder aux dumps WER dans C:\ProgramData\Microsoft\Windows\WER\ReportArchive pour diagnostiquer w3wp.exe sur une VM Azure

Sur une VM Azure, un pool d’applications IIS (w3wp.exe) plante et WER dépose des dumps inaccessibles dans C:\ProgramData\Microsoft\Windows\WER\ReportArchive. Ce guide explique comment reprendre l’accès, extraire les .dmp, rediriger les prochains dumps et les analyser proprement.

Sommaire

Problématique

Vous observez des arrêts intermittents de w3wp.exe (IIS) avec des événements Application Error et Windows Error Reporting (WER) dans l’Observateur d’événements. Les messages confirment la création d’un fichier de vidage mémoire (dump) et de métadonnées, mais les artefacts sont stockés dans un sous-dossier de ReportArchive auquel l’administrateur local n’a pas accès. Malgré une prise de possession apparente et l’octroi du Contrôle total, l’accès reste refusé. En environnement joint à un domaine (Azure AD DS ou AD DS on‑prem), des stratégies peuvent réappliquer des ACL restrictives ou empêcher la substitution du propriétaire, d’où la persistance du blocage.

Pourquoi l’accès est restreint dans WER\ReportArchive

  • ACL très restrictives par défaut : WER protège ses archives. Les identités SYSTEM et TrustedInstaller disposent du contrôle complet. Les administrateurs locaux peuvent être exclus des DACL héritées lorsque WER crée des sous‑dossiers d’incident.
  • Politiques et durcissements : une GPO peut forcer la réécriture du propriétaire (Overwrite owner), désactiver l’héritage, ou imposer une DACL modèle sur ProgramData. Des solutions de durcissement (FSRM, solutions EDR) peuvent aussi restaurer des ACL ou bloquer l’accès direct.
  • Contexte de sécurité : même si takeown/icacls affichent « Réussi », une stratégie de domaine ou un service « protecteur » peut réappliquer des droits au prochain traitement WER, rendant l’accès à nouveau impossible.

Structure typique de ReportArchive

Comprendre ce que vous cherchez aide à valider que vous avez bien récupéré tous les artefacts utiles.

ÉlémentExempleContenu / utilité
Sous‑dossier d’incidentAppCrash_w3wp.exe_123456789abcdef0123456789abcdef01234567_00000000_0b4c02e7Un dossier par événement de crash ou hang.
Dump completmemory.dmp ou FullDump.dmpCapture mémoire exhaustive du processus. Poids important, analyse riche.
Mini‑dumpminidump.dmpPile d’appels et contexte minimal. Suffisant pour la plupart des crashs simples.
Métadonnées WERReport.wer, WERInternalMetadata.xmlDétails sur le module fautif, l’exception, les versions, les horodatages.
Fichiers annexestriage.txt, journaux .txtInformations d’environnement, extractions de registres, etc.

Feuille de route rapide

Avant de tout modifier, suivez ce chemin court pour maximiser vos chances de récupération propre et répétable :

  1. Vérifiez les stratégies effectivement appliquées (gpresult, rsop.msc), et si possible, travaillez avec un compte Administrateur local hors domaine.
  2. Tentez la prise de possession et l’octroi des droits via l’interface graphique puis via la ligne de commande.
  3. Si l’accès échoue, ouvrez un shell en SYSTEM pour copier les fichiers vers un répertoire accessible.
  4. Redirigez les prochains dumps hors de WER (LocalDumps, ProcDump ou politique WER d’entreprise).
  5. Analysez les fichiers .dmp avec WinDbg pour identifier la cause première.

Procédure graphique pour reprendre la main

Cette méthode convient si l’environnement n’impose pas une restauration automatique des ACL.

  1. Clic droit sur C:\ProgramData\Microsoft\Windows\WER\ReportArchivePropriétés → onglet SécuritéAvancé.
  2. Modifier le propriétaire → choisir votre compte ou le groupe Administrators → cocher Remplacer le propriétaire des sous‑conteneurs et objets.
  3. Appliquer, fermer la boîte de dialogue, la rouvrir.
  4. Dans Autorisations, ajouter votre compte/groupe et cocher Contrôle total. Valider sur l’ensemble des sous‑dossiers.

Astuce : sur certains serveurs, l’héritage est désactivé à la racine du dossier d’incident. Activez l’héritage ou propagez explicitement l’entrée Full control sur les éléments existants et futurs.

Procédure en ligne de commande

Exécutez une Invite de commandes ou PowerShell en tant qu’administrateur.

REM Prendre possession récursive
takeown /f "C:\ProgramData\Microsoft\Windows\WER\ReportArchive" /r /d y

REM Octroyer le contrôle total aux Administrators (et à votre compte si besoin)
icacls "C:\ProgramData\Microsoft\Windows\WER\ReportArchive" /grant Administrators:F /t

REM Facultatif : activer l'héritage si désactivé
icacls "C:\ProgramData\Microsoft\Windows\WER\ReportArchive" /inheritance:e

REM Vérifier les ACL effectives
icacls "C:\ProgramData\Microsoft\Windows\WER\ReportArchive" 

Limite courante : si une GPO réapplique des ACL, le succès rapporté par icacls est temporaire. Dès qu’un service WER régénère ou « retouche » le dossier, vos autorisations sautent à nouveau.

Quand les droits semblent appliqués mais l’accès reste refusé

Dans un environnement joint à un domaine ou durci, utilisez ces vérifications et contournements :

ObjectifOutilCommande / ActionCe qu’il faut observer
Inspecter les GPO appliquéesInvite admingpresult /h C:\Temp\gp.htmlPolitiques WER, restrictions sur ProgramData, règles d’héritage/possession.
RSOP ciblérsop.mscExécuter, naviguer vers Composants Windows > WERParamètres Corporate Windows Error Reporting, désactivation WER UI, répertoires.
Isoler l’influence du domaineCompte localConnexion avec un administrateur local non géréSi l’accès fonctionne, une GPO domaine est en cause.
Tester un autre adminCompte Builtin AdministratorConnexion et test d’accèsÉcarte un profil corrompu ou des restrictions par groupe.

Copier les dumps avec un shell en SYSTEM

Le compte SYSTEM dispose d’un accès natif aux dossiers WER. Ouvrez un shell SYSTEM puis copiez vers un emplacement accessible.

REM Ouvrir un CMD interactif en SYSTEM (outil Sysinternals requis sur le serveur)
psexec -i -s cmd

REM Depuis ce shell SYSTEM, copiez les artefacts vers un dossier libre
mkdir D:\Dumps
xcopy /E /I /H "C:\ProgramData\Microsoft\Windows\WER\ReportArchive" "D:\Dumps\WERBackup"

REM Ou avec PowerShell
powershell -NoLogo -NoProfile -Command ^
"Copy-Item 'C:\ProgramData\Microsoft\Windows\WER\ReportArchive*' 'D:\Dumps\WERBackup' -Recurse -Force" 

Conseil : si un outil de sécurité surveille ProgramData, copiez d’abord les fichiers vers un disque de données (par ex. D:\) puis isolez‑les pour l’analyse.

Rediriger la capture des prochains crashs hors de WER

Évitez à l’avenir ReportArchive en configurant une destination maîtrisée.

LocalDumps

Créez la clé HKLM\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps pour une configuration globale, ou ajoutez un sous‑dossier w3wp.exe pour cibler uniquement IIS. Paramètres utiles :

NomTypeValeur recommandéeEffet
DumpFolderREG_EXPAND_SZD:\DumpsChemin d’écriture des dumps.
DumpTypeDWORD21=mini, 2=complet.
DumpCountDWORD10Nombre maximum de dumps conservés.
CustomDumpFlagsDWORDoptionnelAffinage des mini‑dumps (piles, handles, etc.).

Exemples de configuration :

REM Global (tous les processus)
reg add "HKLM\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps" /v DumpFolder /t REG_EXPAND_SZ /d "D:\Dumps" /f
reg add "HKLM\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps" /v DumpType   /t REG_DWORD     /d 2 /f
reg add "HKLM\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps" /v DumpCount  /t REG_DWORD     /d 10 /f

REM Spécifique à w3wp.exe
reg add "HKLM\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps\w3wp.exe" /v DumpFolder /t REG_EXPAND_SZ /d "D:\Dumps" /f
reg add "HKLM\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps\w3wp.exe" /v DumpType   /t REG_DWORD     /d 2 /f 

Redémarrez le service IIS ou le serveur pour garantir la prise en compte, puis vérifiez la création de nouveaux dumps dans D:\Dumps.

ProcDump

ProcDump (Sysinternals) permet de capturer un dump au moment exact du crash, en dehors du pipeline WER.

REM Surveille w3wp.exe et génère un dump complet à la première exception non gérée
procdump -e -w w3wp.exe -ma D:\Dumps

REM Installer ProcDump comme post‑mortem debugger (tous les processus)
procdump -ma -i D:\Dumps 

Bonnes pratiques : utilisez -ma pour un crash complexe, sinon préférez un mini‑dump (-mp ou DumpType=1) pour limiter l’empreinte disque. Vérifiez l’espace disponible avant d’activer un dump complet sur un serveur de production.

Redirection WER d’entreprise

La politique Corporate Windows Error Reporting permet de définir un répertoire local ou réseau pour l’archivage des rapports. Si une GPO l’impose déjà, coordonnez‑vous avec l’équipe GPO pour pointer vers un partage sécurisé auquel l’équipe de support a accès.

Contexte domaine et Azure

  • Join de domaine : si une GPO réinitialise l’owner ou l’héritage, travaillez avec un compte local hors domaine, ou déplacez temporairement la VM hors du domaine pour récupérer les artefacts, en respectant les politiques de sécurité de l’entreprise.
  • Audit et traçabilité : si la conformité l’exige, activez l’audit d’accès aux objets pour tracer les Access Denied et les réécritures d’ACL.
  • EDR/AV : certains outils classent les .dmp comme sensibles. Excluez le répertoire D:\Dumps si nécessaire pendant la collecte, puis réactivez les protections.

Nettoyage, réversibilité et sécurité

  • Restauration des ACL : après récupération, revenez à un état sécurisé.
REM Réactiver l’héritage et réinitialiser les ACL à l’état par défaut NTFS (à manier avec précaution)
icacls "C:\ProgramData\Microsoft\Windows\WER\ReportArchive" /inheritance:e
icacls "C:\ProgramData\Microsoft\Windows\WER\ReportArchive" /reset /t
  • Quota et nettoyage : fixez DumpCount et purge automatique pour éviter de saturer le disque. Archivez hors serveur les dumps utiles et supprimez‑les localement.
  • Confidentialité : un dump peut contenir des secrets (chaînes de connexion, tokens). Manipulez‑le selon les règles de l’entreprise et chiffrez les transferts.

Analyse des dumps w3wp avec WinDbg

Après extraction des fichiers, l’analyse doit être reproductible et documentée.

Ouverture et symboles

REM Lancez WinDbg Preview, puis dans la commande :
.symfix; .reload
!analyze -v
  • Symboles : .symfix configure un chemin de symboles par défaut. Ajoutez des symboles privés de vos applications si nécessaire.
  • Modules : lm liste les DLL chargées. Repérez les modules tiers IIS (ISAPI, filtres) susceptibles d’être fautifs.

Triage rapide

k                 ; pile d’appels
kv                ; pile avec paramètres
r                 ; registres
!peb              ; environnement du processus
!teb              ; thread environment block sur le thread courant

Clés de lecture :

  • Exception code : 0xC0000005 (Access Violation), 0xC0000409 (Stack Buffer Overrun), etc.
  • Module fautif : DLL tiers d’un module IIS, filtre http, ou bibliothèque d’un agent.
  • Thread fautif : regardez la pile du thread qui a levé l’exception et celles des threads gérant le GC/CLR si .NET est en jeu.

Spécificités .NET et ASP.NET

Pour une application ASP.NET classique (hébergée dans le CLR de Windows), chargez sos.dll :

.loadby sos clr       ; .NET Framework
!clrstack             ; pile managée
!pe                   ; dernière exception
!threads              ; état des threads managés
!dumpheap -stat       ; top des types alloués
!gcroot <adresse>     ; détecter des rétentions mémoire

Pour ASP.NET Core en mode in‑process sous IIS, la pile inclut aspnetcorev2_inprocess.dll ; les mêmes commandes aident à identifier une fuite ou une exception non gérée côté application.

Scénarios types et pistes de remédiation

SymptômeIndices dans le dumpRemèdes
Access ViolationPile dans une DLL tierce nativeMettre à jour/retirer le module, activer Rapid‑Fail Protection, isoler dans un pool dédié.
OutOfMemorySegments managés volumineux, !dumpheap montre de gros objetsRéparer la fuite, activer recycling par seuil mémoire, passer en 64 bits si encore en 32 bits.
Stack OverflowRépétition récursive dans la pileCorriger la récursion, ajouter de la validation d’entrée.
Deadlock/HangMultiples threads bloqués sur les mêmes verrousCapturer un dump quand « figé » (procdump -h), revoir la contention et les verrous.

Questions fréquentes

Pourquoi takeown/icacls « réussissent » mais l’ouverture échoue ?
Parce qu’une GPO ou un agent réécrit les ACL ensuite, ou parce que l’héritage est désactivé dans les sous‑dossiers. Le shell SYSTEM permet de contourner temporairement et de copier les fichiers.

Faut‑il un dump complet pour chaque crash ?
Non. Commencez par un mini‑dump. Passez au dump complet si la pile n’est pas suffisante (optimisation, code natif profond, corruption mémoire).

Peut‑on analyser sur le serveur ?
Évitez en production. Copiez les dumps sur une station d’analyse équipée de WinDbg et des symboles adéquats.

Synthèse opérationnelle

  1. Essayez la prise de possession et icacls. Si l’accès reste refusé, suspectez une GPO ou un durcissement.
  2. Capturez les prochains dumps hors de ReportArchive : LocalDumps ou ProcDump.
  3. Utilisez un shell SYSTEM ou un compte local hors domaine pour copier les artefacts existants vers un dossier dédié.
  4. Analysez les .dmp avec WinDbg (!analyze -v) et complétez avec les extensions .NET si nécessaire.
  5. Restaurez les ACL et nettoyez après investigation pour revenir à un état conforme et sécurisé.

Tableau récapitulatif des solutions

ObjectifMéthodeCommandes / Actions clésQuand l’utiliserPoints d’attention
Prendre possession du dossierInterface graphiquePropriétés → Sécurité → Avancé → Modifier le propriétaire, cocher Remplacer le propriétaire…Premier essai sur un serveur non durciPeut être annulé par une GPO ou un agent de sécurité
Attribuer Contrôle totalInterface graphiqueAjouter votre compte/groupe et activer Full controlAprès prise de possessionVérifier l’héritage et la propagation
Forcer via CLIInvite admintakeown /f "<Chemin>" /r /d y
icacls "<Chemin>" /grant Administrators:F /t
Serveurs scriptables ou sans GUIPeut être temporaire si une GPO réécrit les ACL
Vérifier les stratégiesGPO locale/centralegpedit.msc, contrôle GPO centralAvant toute modification durableDocumenter les changements et obtenir l’accord sécurité
Tester avec autre adminCompte différentConnexion sous un autre admin ou Builtin AdministratorDoute sur les droits du compteÉcarte un problème de profil
Isoler l’influence du domaineCompte local / hors domaineTravailler localement, voire retirer temporairement du domaineBlocage persistant malgré icaclsRespecter les processus de changement et d’audit
Copier en SYSTEMShell SYSTEMpsexec -i -s cmd, copie vers D:\DumpsAccès immédiat requisNécessite les outils Sysinternals sur le serveur
Rediriger les futurs dumpsLocalDumpsClés de registre LocalDumpsSolution durable, sans dépendre de WERDimensionner l’espace disque et le nombre de dumps
Capturer au crashProcDumpprocdump -e -w w3wp.exe -ma D:\DumpsReproduction dirigée, collecte fineContrôler l’impact et arrêter après collecte

En bref : si l’accès à ReportArchive vous résiste, ne perdez pas de temps à lutter contre les politiques — récupérez ce que vous pouvez en SYSTEM, puis déplacez durablement la capture de crash vers un répertoire maîtrisé (LocalDumps/ProcDump). Votre boucle de diagnostic sera plus rapide, plus sûre et reproductible.

Sommaire