[pso] Fwd: Tema1 Win Problema la NtClose

Octavian Purdila pso@cursuri.cs.pub.ro
Sat, 15 May 2004 14:08:06 +0300


--Boundary-00=_WofpAOBMsP1pW1M
Content-Type: text/plain;
  charset="iso-8859-1"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline


Parca a mai avut cineva probleme cu NtClose() pe lista... 

----------  Forwarded Message  ----------

Subject: Tema1 Win Problema la NtClose
Date: Saturday 15 May 2004 02:35
From: Rizoiu Valentin <rizoiu_valentin@yahoo.com>
To: tavi@cs.pub.ro

Salut!
  Mai intai tin sa precizez ca nu trimit acest mail pe grup intrucat
problema cu care ma confrunt este legata de o tema mai veche (tema1
pe win).... Anume programul ruleaza fara probleme toate testele in
afara de cel pt.   NtClose  ; mai exact in momentul in care ajung in
phase2 la do_monitor imi apare un BugCheck cu mesajul
"Driver_IRQL_NOT_LESS_OR_EQUAL" ...O kestie pe care am observat-o
este ca daca din driver-ul meu scot partea in care fac  logarea
apelurilor sistem monitorizate (si modific si prog. de test corespunzator)
Eroarea de mai sus nu-mi mai apare...deci banuiesc k totul ar avea legatura
 cu modul in care fac logarea...si nu inteleg de ce se intampla acest fapt
 (tin sa precizez k interceptarea celorlalte apeluri sistem merge OK...am
 incercat sa interceptez si alte apeluri decat cele date in fisierul de test
 si iarasi totul a functionat).
   O posibila cauza pt. BugCheck-ul de mai sus ar mai fi (conform
 documentatiei pt. WinDbg) incercarea de accesa PagedMemory din diverse
 contexte (nu are rost sa le enumar aici intrucat nu folosesc deloc
 PagedMemory in programul meu)... O alta cauza ar putea fi (din cate am
 auzit) ca in momentul in care fac KeAqcuireSpinLock(...) ....
 KeReleaseSpinLock(...) sa nu fac bine
salvarea/restaurarea irq-urilor ( dar iarasi nu imi explic, daca aceasta ar
 fi cauza, de ce doar NtClose() crapa )...Mai tin sa mentionez ca pt. fiecare
 syscall interceptat am o structura precum cea de mai jos:
struct monitored_syscall
{
   LIST_ENTRY pid_list;     // list_head pt. pid-urile ce monitorizeaza
 apelul crt KSPIN_LOCK lock;         // spin_lock pt. sincronizarea accesului
 la list_head KIRQL oldirql;           // var. pt. salvarea/restaurarea
 irq-urilor void *original_syscall;  // back-up pt. syscall-ul interceptat
};
...iar de "lock" ma folosesc atunci cand efectuez operatii asupra listei de
procese asociate syscall-ului ( adaugarea/scoaterea unei monitorizari...
cautarea unui pid monitorizat in 'interceptor', etc ).
...Ca o curiozitate daca sincronizez toate operatiile
 (intercept/dezintercept/ monitorizare/demonitorizare, etc) cu un singur 
 SpinLock global nu imi mai apare nici o problema...(doar k la multe apeluri
 parca se simte putzin overhead-ul ...dar nu imi mai da nici un BugCheck).


--Boundary-00=_WofpAOBMsP1pW1M
Content-Type: text/html;
  charset="us-ascii";
  name=" "
Content-Transfer-Encoding: 7bit

<DIV>Salut!</DIV>
<DIV>&nbsp; Mai intai tin sa precizez ca nu trimit acest mail pe grup intrucat<BR>problema cu care ma confrunt este legata de o tema mai veche (tema1 <BR>pe win).... Anume programul ruleaza fara probleme toate testele in <BR>afara de cel pt.&nbsp;&nbsp; NtClose&nbsp; ; mai exact in momentul in care ajung in <BR>phase2 la do_monitor imi apare un BugCheck cu mesajul <BR>"Driver_IRQL_NOT_LESS_OR_EQUAL" ...O kestie pe care am observat-o<BR>este ca daca din driver-ul meu scot partea in care fac&nbsp; logarea<BR>apelurilor sistem monitorizate (si modific si prog. de test corespunzator)<BR>Eroarea de mai sus nu-mi mai apare...deci banuiesc k totul ar avea legatura cu<BR>modul in care fac logarea...si nu inteleg de ce se intampla acest fapt<BR>(tin sa precizez k interceptarea celorlalte apeluri sistem merge OK...am incercat<BR>sa interceptez si alte apeluri decat cele date in fisierul de test si iarasi<BR>totul a functionat).<BR>&nbsp;&nbsp; O posibila cauza pt. BugCheck-ul de mai su
 s ar mai
 fi (conform documentatiei <BR>pt. WinDbg) incercarea de accesa PagedMemory din diverse contexte (nu are rost<BR>sa le enumar aici intrucat nu folosesc deloc PagedMemory in programul meu)...<BR>O alta cauza ar putea fi (din cate am auzit) ca in momentul in care fac <BR>KeAqcuireSpinLock(...) .... KeReleaseSpinLock(...) sa nu fac bine <BR>salvarea/restaurarea irq-urilor ( dar iarasi nu imi explic, daca aceasta ar fi cauza,<BR>de ce doar NtClose() crapa )...Mai tin sa mentionez ca pt. fiecare syscall interceptat<BR>am o structura precum cea de mai jos:</DIV>
<DIV>struct monitored_syscall<BR>{<BR>&nbsp;&nbsp; LIST_ENTRY pid_list;&nbsp;&nbsp;&nbsp;&nbsp; // list_head pt. pid-urile ce monitorizeaza apelul crt<BR>&nbsp;&nbsp; KSPIN_LOCK lock;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // spin_lock pt. sincronizarea accesului la list_head<BR>&nbsp;&nbsp; KIRQL oldirql;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // var. pt. salvarea/restaurarea irq-urilor<BR>&nbsp;&nbsp; void *original_syscall;&nbsp; // back-up pt. syscall-ul interceptat</DIV>
<DIV>};</DIV>
<DIV>...iar de "lock" ma folosesc atunci cand efectuez operatii asupra listei de <BR>procese asociate syscall-ului ( adaugarea/scoaterea unei monitorizari...<BR>cautarea unui pid monitorizat in 'interceptor', etc ).<BR>...Ca o curiozitate daca sincronizez toate operatiile (intercept/dezintercept/<BR>monitorizare/demonitorizare, etc) cu un singur&nbsp; SpinLock global nu imi mai <BR>apare nici o problema...(doar k la multe apeluri parca se simte putzin overhead-ul<BR>...dar nu imi mai da nici un BugCheck).</DIV>
<DIV>&nbsp;</DIV>
<DIV>plz&nbsp;Help! <BR>&nbsp;<BR></DIV><p>
		<hr size=1><font face=arial size=-1>Do you Yahoo!?<br><a href="http://pa.yahoo.com/*http://us.rd.yahoo.com/evt=24311/*http://promo.yahoo.com/sbc/">SBC Yahoo!</a> - Internet access at a great low price.
--Boundary-00=_WofpAOBMsP1pW1M--