[pso] IRQL_NOT_LESS_OR_EQUAL

Razvan Deaconescu razvan.deaconescu at cs.pub.ro
Sun Apr 19 22:20:57 EEST 2009


On Sun, 2009-04-19 at 21:43 +0300, Matei Gruber wrote:
> Salut,
> 
> Îmi crapă driverul de UART pe windoze cu IRQL_NOT_LESS_OR_EQUAL din
> cauza unui access la memorie pe întrerupere. În intrerupere accesez
> device objectul (non-pageable) și o listă de obiecte alocate din
> NonPagedPool. Îmi intră swapperul și văd BSOD când fac din ISR
> 
> if (IoGetCurrentIrpStackLocation(irp)->MajorFunction != IRP_MJ_READ) ...

De ce faci acces la campul MajorFunction din intrerupere? Cine este
IRP-ul primit?

> MSDN zice că funcția e safe la orice IRQL, dar nu știu dacă IRP-urile
> și stivele asociate pot fi paginate. Poate fi accesarea acestor zone
> din context DPC o soluție?

Nu stiu exact ce faci in rutina de tratare a intreruperii dar, in mod
normal, operatii de acest gen e bine sa le executi la PASSIVE_LEVEL
(context proces) sau DISPATCH_LEVEL (DPC).

Razvan



More information about the pso mailing list