[pso] [tema2][windows]nelamuriri

Catalin Ionita io.catalin at gmail.com
Thu Apr 12 12:39:23 EEST 2007


Salut,

In cazul in care se detecteaza o executie a unei functii la un nivel mai
mare decat ar trebuii windows o sa semnaleze acest fapt printr-un ecran
albastru pe care scrie IRQ_LEVEL_NOT_LESS_OR_EQUAL si un dump (cea ce
inseamna ca nu prea mai are cum sa dea passed testul in continuare).

In principal aceste IRQL nu sunt altceva decat atributele threadurilor
kernel din windows (ca sa poata fi stabilit care pe care poate sa blocheze
si sa preia executia intr-un anumit context sau altul).
In principal threadul care executa isr nu poate astepta sau sa fie blocat de
un alt thread cu IRQL mai mic iar la Kesetevent se seteaza doar un flag si
se merge mai departe ,asta in cazul in care nu fortezi schimbarea
contextului adica daca pui wait pe true se cere o executie imediata a
kewaitforsingleobject
(treaba asta da blue screen cu mesajul IRQ_LEVEL_NOT_LESS_OR_EQUAL si este
perfect logic sa fie asa) . Daca un thread intradevar asteapta la
kewaitforsingleobject nu va fi planificat sa fie executat decat de threadul
de scheduling (care lucreaza la un irql mare) si se va detecta ca acest flag
a fost setat(adica treadul o sa isi schimbe statutul in planificabil)  si va
trece de kewaitforsingleobject (cam acelasi lucru se putea face cu variabile
atomice dar ar fi  fost busy-waitting si nu cred ca este eficient). O
varianta simpla ar fi fost terminarea pachetelor de read din dpc in momentul
cand s-au primit suficiente caractere pentru asta.... dar asta ar merge doar
pt testul asta(in care se testeaza totul f  sincron) si numai pt driverul
asta(un driver de mouse foloseste kesetevent din f multe contexte incluzand
contextul de intrerupere pt ca practic mouse-ul trebuie sa mearga indiferent
de ce alte intreruperi mai sunt in sistem)

Daca gresesc te rog sa-mi spui , ca nu mi-e greu sa fac un busy waiting
(chiar e f simplu in comparatie cu cat m-am chinuit cu eventul) sau si mai
simplu e sa le termin din dpc.

Si daca ma insel, de ce windows nu ma arunca intr-un blue screen cu mesajul
IRQ_LEVEL_NOT_LESS_OR_EQUAL?

Numai bine,
Catalin Ionita




On 4/11/07, Mihai Florian <my_mihai_florian at yahoo.com> wrote:
>
> Buna,
>
> Este foarte probabil sa depunctez utilizari de functii la IRQL-uri
> nepotrivite. Va recomand sa cititi cu atentie din DDK specificatiile
> functiilor pe care le folositi, mai ales IRQL-ul la care pot fi
> utilizate si in ce conditii.
>
> De exemplu pentru cazul de fata specificatia KeSetEvent din DDK este
> urmatoarea:
>
> LONG
>   KeSetEvent(
>     IN PRKEVENT  Event,
>     IN KPRIORITY  Increment,
>     IN BOOLEAN  Wait
>     );
> ...
> If Wait is set to FALSE, the caller can be running at IRQL <=
> DISPATCH_LEVEL. Otherwise, callers of KeSetEvent must be running at
> IRQL = PASSIVE_LEVEL and in a nonarbitrary thread context.
>
> So... nu aveti voie sa rulati la un nivel mai mare de DISPATCH_LEVEL
> cand folositi KeSetEvent.
> Daca va uitati in DDK la InterruptService:
>
> A driver's InterruptService routine (ISR) executes in an interrupt
> context, at some system-assigned DIRQL, as specified by the
> SynchronizeIrql parameter to IoConnectInterrupt. (Other devices, with
> higher DIRQL values, can interrupt the ISR.)
>
> Orice DIRQL este mai mare decat DISPATCH_LEVEL dupa cum puteti observa
> de aici:
> http://msdn2.microsoft.com/en-us/library/ms810029.aspx#irql_sched_topic5
>
> In concluzie nu aveti voie sa folositi KeSetEvent din handler-ul de
> intrerupere.
>
> Ceva similar se aplica si pentru KeReleaseSemaphore.
> Inca o data va recomand sa cititi cu atentie specificatiile din DDK.
>
> Mihai
>
>
>
>
> ____________________________________________________________________________________
> Finding fabulous fares is fun.
> Let Yahoo! FareChase search your favorite travel sites to find flight and
> hotel bargains.
> http://farechase.yahoo.com/promo-generic-14795097
> _______________________________________________
> 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/20070412/805de2e6/attachment.htm


More information about the pso mailing list