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 pornesc la drum in scrierea de drivere… folosind Visual Studio
Acum cateva zile un prieten ma intreba cum poate sa scrie repede un driver simplu. I-am explicat atunci ca trebuie sa faca download la DDK sa si-l instaleze, apoi sa ia un sample de acolo, sa intre in mediul de build din linie de comanda si sa dea build. Din cate am vazut pe fata lui, nu prea i-a suras ideea.

