[pso] IRQL_NOT_LESS_OR_EQUAL

Matei Gruber matei.gruber at gmail.com
Sun Apr 19 22:24:53 EEST 2009


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
>


More information about the pso mailing list