[pso] [tema1] [win] CheckUsers() in tema1.h
Andrei Costin
pso@cursuri.cs.pub.ro
Thu, 17 Mar 2005 06:32:42 -0800 (PST)
Buna
Am o problema (cel putin am avut inainte de a modifica putin tema1.h) - functia
CheckUsers(TOKEN_USER *u1,TOKEN_USER *u2) duce la BSOD in cazul in care unul din
parametrii u1 sau
u2 este NULL.
Cum poate sa se intample? In "my_syscall()" sa zicem ca fac la inceput (inainte sa tratez
argumentul
cmd):
GetCurrentUser(¤t_user);
GetUserOf(pid, &pid_user);
iar in STOP si START monitor am testul care suna literal "utilizatorii NEadmini pot opri
monitorizarea doar a pid-urilor care le apartin" care s-a traduce aproximativ asa:
if (!UserAdmin() && !CheckUsers(current_user, pid_user))
return STATUS_ACCESS_DENIED;
Totul suna si pare ok - problema e ca ptr pid=0, GetUserOf() returneaza status diferit de
STATUS_SUCCESS si nu completeaza pid_user => CheckUsers(current_user, pid_user) duce la
BSOD
Solutii:
1.modificam iful de mai sus astfel (cu conditia ca pid_user si current_user sunt
initilizati cu
NULL):
if (pid_user != NULL && current_user!= NULL && !UserAdmin() &&
!CheckUsers(current_user, pid_user))
2. pctul 1 arata stufos, mai usor modific in tema1.h:
BOOLEAN CheckUsers(TOKEN_USER *u1,TOKEN_USER *u2)
{
if (!u1 || !u2)
return FALSE;
else
return Rtl...();
}
Am dreptul si motivati corecta sa modific tema1.h, sau gresesc undeva?
Andrei
__________________________________
Do you Yahoo!?
Yahoo! Small Business - Try our new resources site!
http://smallbusiness.yahoo.com/resources/