[pso] [tema2][windows]nelamuriri

Mihai Florian my_mihai_florian at yahoo.com
Wed Apr 11 13:59:54 EEST 2007


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


More information about the pso mailing list