[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