Un gandac in Windows Home Server
Lucram in perioada aceasta la un proiect ce implica un driver care creeaza discuri virtuale. Continutul discului virtual este stocat intr-un fisier, iar sarcina driver-ului este de a prezenta continutul acestui fisier ca un disc.
Testand driver-ul pe Windows Home Server cu Driver Verifier activat, sistemul s-a blocat dupa formatarea discului, afisand un binecunoscut ecran albastru.
Pentru a identifica sursa erorii, am recreat conditiile aparitiei bug-ului cu debugger-ul (WinDbg) atasat la sistemul de operare.
Analizand crash-ul cu ajutorul lui WinDbg, am observat urmatorul mesaj:
kd> !analyze -v ******************************************************************************* * * * Bugcheck Analysis * * * *******************************************************************************
DRIVER_VERIFIER_IOMANAGER_VIOLATION (c9)
The IO manager has caught a misbehaving driver.
Arguments:
Arg1: 0000000c, Invalid IOSB in IRP at APC IopCompleteRequest (appears to be on
stack that was unwound)
Arg2: b9b02810, IOSB address
Arg3: 00000000, IRP address
Arg4: 00000000, 0
Mai mult, analiza spunea ca driver-ul care a cauzat eroarea este chiar driver-ul nostru (MYDRIVER).
BUGCHECK_STR: 0xc9_c
DRIVER_VERIFIER_IO_VIOLATION_TYPE: c
IOSB_ADDRESS: ffffffffb9b02810
IRP_ADDRESS: 82f5af20
DEFAULT_BUCKET_ID: DRIVER_FAULT
PROCESS_NAME: explorer.exe
CURRENT_IRQL: 1
DEVICE_OBJECT: 8186f030
DRIVER_OBJECT: 8179a158
IMAGE_NAME: MYDRIVER.sys
DEBUG_FLR_IMAGE_TIMESTAMP: 48693683
MODULE_NAME: MYDRIVER
FAULTING_MODULE: b9878000 MYDRIVER
Aveam toate motivele sa credem ca avem un bug in driver, deci am pornit la vanatoare.
Cum imi depanez aplicatia pe alta versiune de Windows?
Aveam o aplicatie care rula perfect pe sistemul meu cu Windows Vista, dar nu si pe Windows XP. Cum sa fac sa vad de ce nu merge? Prima solutie evidenta: o masina virtuala cu Windows XP si aplicatia rulata in ea. Dar ce te faci atunci cand vrei sa faci si putin debugging pentru a vedea fix la ce linie din codul sursa crapa aplicatia ta?
