Mais qu'est ce qu'un écran bleu ? Tout simplement un message d'alerte du coeur du système d'exploitation indiquant que quelque chose s'est mal déroulé. Windows affiche alors une série de code d'erreur. Dans mon cas tout les écrans avaient le même premier code :
0x0000008E == KERNEL_MODE_EXCEPTION_NOT_HANDLED
Microsoft faisant bien les choses, nous disposons d'une description complète de ce code sur msdn. Le deuxième paramètre indique l'adresse et le troisième un "trap frame". J'ai donc :
1 Except code : 0xC0000005Un autre écran bleu me donne :
2 Address : 0x8062BFBF
3 trap frame : 0xBEE482E4
4 reserved : 0x00000000
1 Except code : 0xC0000005Pour le code d'exception, rien de plus facile, il suffit de regarder dans le même article et j'ai :
2 Address : 0x8062BFBF
3 trap frame : 0xB71946D4
4 reserved : 0x00000000
0xC0000005 == STATUS_ACCESS_VIOLATIONEn gros une violation d'accès mémoire. Le lecteur curieux pourra aller voir ntstatus.h pour le detail.
0xC0000005: STATUS_ACCESS_VIOLATION indicates that a memoryMSDN indique quelques pistes pour résoudre le problème:
access violation occurred.
- Vérifiez l'espace disque : OK pour moi
- Si il y a un driver identifé, désactivez le ou autre : pas de driver mentionné
- Changez de carte vidéo : je n'en ai pas sous la main.
- Mettez à jour le BIOS : j'ai fait çà il y a quelques années, je ne souhaite pas brancher ma puce à chaud sur un autre PC. Je n'ai plus le goût du risque.
- Désactivez les options de cache mémoire dans le BIOS.
>> All of the minidumps are crashed with same symptom.
>>
>> BugCheck 1000008E, {c0000005, 8062bfbf, b625598c, 0}
>> Probably caused by : ntkrnlpa.exe ( nt!HvpGetCellMapped+5f )
>> The registry is corrupted. Refer this problems :
>> http://www.techspot.com/vb/showthread.php?p=236454#post236454
>> http://www.techspot.com/vb/all/windows/t-63005-BSOD-Memory-Problems.html
La base de registre aurait donc un problème. Mais par quel moyen cette personne est elle arrivée à cette conclusion ?
La réponse est WinDBG, un utilitaire de Microsoft pour mener ce genre d'analyse. A chaque écran bleu, il est possible de garder une trace de l'étât du coeur de Windows au momment du plantage, c'est un fichier que l'on nomme minidump. WinDBG permet de le décrypter.
Je charge donc le dernier minidump et je me lance :
Debugging Details:
------------------
EXCEPTION_CODE: (NTSTATUS) 0xc0000005 - L'instruction "0x%08lx" emploie l'adresse m moire "0x%08lx". La m moire ne peut pas tre "%s".
FAULTING_IP:
nt!HvpGetCellMapped+5f
8062bfbf 8b4304 mov eax,dword ptr [ebx+4]
TRAP_FRAME: b71946d4 -- (.trap 0xffffffffb71946d4)
ErrCode = 00000000
eax=00001ff0 ebx=00001ff0 ecx=889ab6a0 edx=00000007 esi=e2525b60 edi=00000fff
eip=8062bfbf esp=b7194748 ebp=b7194790 iopl=0 nv up ei pl zr na pe nc
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00010246
nt!HvpGetCellMapped+0x5f:
8062bfbf 8b4304 mov eax,dword ptr [ebx+4] ds:0023:00001ff4=????????
Resetting default scope
CUSTOMER_CRASH_COUNT: 1
DEFAULT_BUCKET_ID: DRIVER_FAULT
BUGCHECK_STR: 0x8E
PROCESS_NAME: firefox.exe
LAST_CONTROL_TRANSFER: from 8062bed0 to 8062bfbf
STACK_TEXT:
b7194790 8062bed0 e2525b60 00ffffff e2525b60 nt!HvpGetCellMapped+0x5f
b71947a4 80630364 e2525b60 00ffffff d08f9664 nt!HvpGetHCell+0x10
b71947c0 80634e9c e2525b60 00ffffff e2525b60 nt!HvMarkCellDirty+0x30
b71947e0 80634fd6 e2525b60 002b8660 e1098170 nt!CmpMarkKeyDirty+0x68
b71947f8 8062ab42 e2525b60 002b8660 00000001 nt!CmpFreeKeyByCell+0x14
b7194828 806191a2 e2a4c4a8 b7194894 00128740 nt!CmDeleteKey+0x8c
b7194888 8053c808 00000540 00128768 7c91eb94 nt!NtDeleteKey+0x138
b7194888 7c91eb94 00000540 00128768 7c91eb94 nt!KiFastCallEntry+0xf8
WARNING: Frame IP not in any known module. Following frames may be wrong.
00128768 00000000 00000000 00000000 00000000 0x7c91eb94
STACK_COMMAND: kb
FOLLOWUP_IP:
nt!HvpGetCellMapped+5f
8062bfbf 8b4304 mov eax,dword ptr [ebx+4]
SYMBOL_STACK_INDEX: 0
SYMBOL_NAME: nt!HvpGetCellMapped+5f
FOLLOWUP_NAME: MachineOwner
MODULE_NAME: nt
IMAGE_NAME: ntkrnlpa.exe
DEBUG_FLR_IMAGE_TIMESTAMP: 42250a1d
FAILURE_BUCKET_ID: 0x8E_nt!HvpGetCellMapped+5f
BUCKET_ID: 0x8E_nt!HvpGetCellMapped+5f
Followup: MachineOwner
Pour mémoire les quelques commandes que j'ai utilisées dans WinDBG sont:
- .bugcheck : liste les données du code
- .kb : liste la pile (stack trace)
- .kv : liste les trap frames
- .trap
: récupére les registres au moment de l'erreur
La base de registre de mon utilisateur est corrompu. J'ai donc créé un nouvel utilisateur, migré mes préférences applicatives et tout fonctionne correctement.
D'autres questions ?