[pso] IRQL_NOT_LESS_OR_EQUAL
Gabriel Bercea
gamitech at gmail.com
Sun Apr 19 22:41:29 EEST 2009
>
>3. Pot sa accesez memorie paginata din DPC?
>
NU. DPC = IRQL DISPATCH_LEVEL
>
>2. Deci, recomandarea ar fi sa declansez un DpcForIsr din Intrerupere
>si sa ma uit acolo la IRPuri?
>
In ISR nu este recomandat sa faci atata overhead. De aia exista DPC.
>
>1. Ca sa vad daca IRP-ul este un read sau un write. In ISR scot date
>din IRP-urile de write, si completez IRP-urile de read. Stiu, este
>destul de heavy pentru un ISR.
>
Check DIRQL operations.
Hints:
Data viitoare cand iei BSOD arata si tu output de la !analyze -v , chiar nu
ajuta cu mare lucru ce ai spus mai sus.
Cum de esti sigur ca acolo crapa driverul ?
Try:
!isr
!locks
!apc
!thread
Ajuta.
2009/4/19 Matei Gruber <matei.gruber at gmail.com>
> Salut.
>
> 0. Multumesc Razvan.
>
> 1. Ca sa vad daca IRP-ul este un read sau un write. In ISR scot date
> din IRP-urile de write, si completez IRP-urile de read. Stiu, este
> destul de heavy pentru un ISR.
>
> 2. Deci, recomandarea ar fi sa declansez un DpcForIsr din Intrerupere
> si sa ma uit acolo la IRPuri?
>
> 3. Pot sa accesez memorie paginata din DPC?
>
> Matei
>
> 2009/4/19 Razvan Deaconescu <razvan.deaconescu at cs.pub.ro>:
> > 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
> >
> > _______________________________________________
> > pso mailing list
> > pso at cursuri.cs.pub.ro
> > http://cursuri.cs.pub.ro/cgi-bin/mailman/listinfo/pso
> >
> _______________________________________________
> pso mailing list
> pso at cursuri.cs.pub.ro
> http://cursuri.cs.pub.ro/cgi-bin/mailman/listinfo/pso
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://cursuri.cs.pub.ro/pipermail/pso/attachments/20090419/6c20953a/attachment-0001.htm>
More information about the pso
mailing list