Upgradoval som jeden počítač s Vista Business 32bit na Windows 7 Professional 32bit. Upgrade prebehol v pohode, ale bol problém s jednou nefunkčnou CD romkou a o pár dní užívateľ vravel, že počítač sa dlho vypína, dokonca aj spadne do Blue Screenu.
Prvé informácie o BSOD sú v Event Logu:
Chybový sektor 0x9F_4_cdrom_IMAGE_jraid.sys, typ 0 Názov udalosti: BlueScreen Odozva: Nie je k dispozícii Identifikácia kabinetu: 0 ... Priložené súbory: C:\Windows\Minidump\090409-106078-01.dmp
Vďaka tomuto padá prvé podozrenie na ovládač pre JMicron JMB36X Controller (jraid.sys). Keďže však tento ovládač nie je priamo spomenutý v zázname a aj pre kontrolu je dobré zanalyzovať Memory Dump ktorý je v priečinku Minidump.
Analýza výpisu pamäte (Memory Dump)
Súbor 090409–106078–01.dmp som otvoril v 32bitovej
verzii programu WinDbg a spustil som analýzu príkazom
!analyze
.
0: kd> !analyze ******************************************************************************* * * * Bugcheck Analysis * * * ******************************************************************************* Use !analyze -v to get detailed debugging information. BugCheck 9F, {4, 258, 855ec798, 82f66b24} Probably caused by : cdrom.sys ( cdrom!DeviceSendPowerProcessRequest+15b ) Followup: MachineOwner
Prvá dôležitá informácie je, že Blue Screen vznikol na základe Bug Check stavu – kernel zistil, že niečo nie je v poriadku so zariadením alebo ovládačom a prepol teda na Blue Screen pretože nemôže normálne pokračovať. Súčasťou Blue Screenu je zaznamenanie stavu pamäte do .dmp súboru (ak je zapnutá voľba Zápis pamäte pre ladenie > Výpis pamäte jadra (Kernel memory dump)).
Rozšírené informácie o stave pamäte dostaneme príkazov !analyze
-v
:
0: kd> !analyze -v ******************************************************************************* * * * Bugcheck Analysis * * * ******************************************************************************* DRIVER_POWER_STATE_FAILURE (9f) A driver is causing an inconsistent power state. Arguments: Arg1: 00000004, The power transition timed out waiting to synchronize with the Pnp subsystem. Arg2: 00000258, Timeout in seconds. Arg3: 855ec798, The thread currently holding on to the Pnp lock. Arg4: 82f66b24 ...
Vďaka dostupnosti .pdb symbolov je možné zistiť význam jednotlivých
parametrov Bug
Check 0×9F priamo z analýzy. Prvý parameter Arg1 = 0x04
označuje typ problému pri DRIVER_POWER_STATE_FAILURE
. Bohužial
zatiaľ nie je zdokumentovaný na webe MSDN Library ani vo Windows 7 Driver
Kit. Typ 0×04 bol pridaný vo Vista SP2 a Windows 7. Podľa
Melissi Hannah to znamená, že došlo k deadlocku v threadoch a pokiaľ
sa neodblokujú do určitého času (Arg2
) bude vyvolaný Bug Check
0×9F s kódom 4.
Dlhé vypínanie
Z druhého parametru Bug Checku sa dá vyčítať, ako dlho bude systém čakať pri deadlocku threadov pri vypínaní: 0×0258 = 600, údaj je v sekundách, čiže to je 10 minút, kým systém spadne do Blue Screenu. Čo korešponduje s popisovaným problémom – že počítač sa dlho vypína. Neznamená to však, že k BSOD dojde vždy. Je možné, že ovládač sa niekedy „rozbehne“ a vypne. Bez BSOD by sa to však tak ľahko nepodarilo zistiť
Zdroj problému
Tretí argument Bug Checku reportuje adresu threadu, ktorý bol zablokovaný
(The thread currently holding on to the Pnp lock.). Detail si
zobrazíme príkazom !thread 855ec798
. V tomto threade je
používaný ovládač cdrom.sys
. Aj podľa rozšírenej analýzy
problém nastal vo funkcii volanej týmto ovládačom –
DeviceSendPowerProcessRequest
.
... SYMBOL_NAME: cdrom!DeviceSendPowerProcessRequest+15b FOLLOWUP_NAME: MachineOwner MODULE_NAME: cdrom IMAGE_NAME: cdrom.sys DEBUG_FLR_IMAGE_TIMESTAMP: 4a5bbf1c FAILURE_BUCKET_ID: 0x9F_cdrom!DeviceSendPowerProcessRequest+15b BUCKET_ID: 0x9F_cdrom!DeviceSendPowerProcessRequest+15b ...
Príkazom lmvm cdrom
získame bližšie informácie
o ovládači. Jedná sa o štandardný ovládač dodávaný so systémom.
Z Správcu zariadení (Device Manager) je vidieť, že CD-Romky sú pripojené
cez JMicron JMB36X. Skontrolovanie tohto ovládača cez lmvm jraid
odhalí, že je celkom starý – z novembra 2008.
0: kd> lmvm jraid start end module name 8b400000 8b418000 jraid T (no symbols) Loaded symbol image file: jraid.sys Image path: \SystemRoot\system32\DRIVERS\jraid.sys Image name: jraid.sys Timestamp: Fri Nov 21 16:05:38 2008 (4926CE42) CheckSum: 000215C8 ImageSize: 00018000 Translations: 0000.04b0 0000.04e4 0409.04b0 0409.04e4
Server JMicronu obsahuje novšie ovládače pre ich chip (R1.17.50 z augusta 2009) na adrese ftp://driver.jmicron.com.tw/…_Vista_Win7/. Podľa ReleaseNotes.txt odvtedy opravovali niekoľko problémov s BSOD. Ovládač som nainštaloval a teraz budem čakať, či sa chyba prejaví a budem môcť analyzovať ďalší problém, alebo je to vyriešené.
PS: Pre mnohých sú BSOD veľkou pohromou a symbolom nefunkčnosti Windows. Pre mňa sú vďaka Markovi Russinovichovi najcennejším zdrojom riešenia problémov.