[pso] BSOD MmGetSystemAddressForMdlSafe

Matei Gruber matei.gruber at gmail.com
Sun May 10 15:22:05 EEST 2009


Așa este, Răzvan, nu eliberam IRP-ul pe toate căile de ieșire.

Mai precis, observ că nu este suficient ca handlerul read/write al
unui driver să întoarcă STATUS_<EROARE> în caz de eroare, el trebuie
să facă și IrpCompleteRequest și să umple blcoul de IoStatus, cu codul
de eroare. În caz contrar, cum era cazul meu, nu toate resursele vor
fi eliberate. Mai precis MDL-ul nu va fi eliberat, aceasta indiferent
dacă el a fost mapat sau nu. Asta va duce în final la BSOD.

Matei

2009/5/10 Razvan Deaconescu <razvan.deaconescu at cs.pub.ro>:
> On Sun, 2009-05-10 at 13:02 +0300, Matei Gruber wrote:
>> Salut,
>>
>> Creez un device de tip FILE_DEVICE_DISK si folosesc DO_DIRECT_IO. In
>> rutinele de read si write copiez date in/din buffer mapat cu
>> MmGetSystemAddressForMdlSafe(irp->MdlAddress, NormalPagePriority).
>>
>> Rulez suita de test, trec toate testele. Rulez din nou, primesc BSOD.
>>
>> Nu imi este f. clar mecanismul de folosire al
>> MmGetSystemAddressForMdlSafe.
>
> E OK modul de folosire. Poate nu dealoci ceva sau nu stergi cum trebuie
> dispozitivul?
>
> Razvan
>
>
> _______________________________________________
> pso mailing list
> pso at cursuri.cs.pub.ro
> http://cursuri.cs.pub.ro/cgi-bin/mailman/listinfo/pso
>


More information about the pso mailing list