[pso] [tema1]Problema GetUserOf

Marius Viorel Grigoras grigorasmariusviorel at gmail.com
Thu Mar 25 16:12:13 EET 2010


Se vor schimba testele (adica se va face CloseHandle in teste asa cum ar fi
corect - tavi spunea la curs ca daca nu se face CloseHandle, procesul ramane
un fel de zombi si de asta se pastreaza la nivel kernel-space informatii
despre el) sau implementam cu PsSetCreateProcessNotifyRoutine ?

Multumesc,
Vio.

În data de 25 martie 2010, 13:32, Octavian Voicu
<octavian.voicu at gmail.com>a scris:

> 2010/3/21 Alexandra Arcalianu <arcalianualexandra at gmail.com>:
> > Am urmatoarea problema pe Windows la ultimul apel do_stop din functia
> > test_syscall.
> > Avem secventa:
> >     do_as_guest("test start %s -1 %d", syscall, STATUS_SUCCESS);
> >     do_stop(syscall, last_child, STATUS_INVALID_PARAMETER);
> > Adica procesul curent porneste un copil ce face start la monitorizare
> pentru
> > apelul syscall. Parintele asteapta acest copil, cu WaitForSingleObject
> > (pi.hProcess, INFINITE), dupa care apeleaza do_stop pentru pid-ul
> copilului
> > care __acum__ nu mai este un pid valid.
> > La mine functia GetUserOf() imi returneaza tot STATUS_SUCCESS pentru
> > acest pid invalid si nu inteleg de ce.
> > Problema e valabila pentru orice syscall valid.
>
> Problema ar fi din codul testerului:
>
> CreateProcessAsUser(token, NULL, dummy, NULL, NULL,
>                                        FALSE, 0, NULL, NULL, &si, &pi);
> WaitForSingleObject(pi.hProcess, INFINITE);
>
> Conform documentatiei, CreateProcessAsUser [1] returneaza in structura
> LPPROCESS_INFORMATION, printre altele, doua handle-uri: unul la
> procesul creat si altul la thread-ul creat:
>
> # lpProcessInformation [out]
> #   A pointer to a PROCESS_INFORMATION structure that receives
> identification information about the new process.
> #   Handles in PROCESS_INFORMATION must be closed with CloseHandle
> when they are no longer needed.
>
> Pana nu inchidem toate handle-urile, sistemul nu va elibera resursa
> respectiva. Cum noi mai avem un handle deschis la procesul respectiv
> (pi.hProcess, deschis implicit de CreateProcessAsUser), functia
> GetUserOf (mai exact ZwOpenProcess din cadrul ei) il va putea deschide
> si nu va aparea nicio eroare.
>
> In concluzie, "eroarea" s-ar putea considera ca este in codul de
> testare; pe de alta parte, ar fi gresit sa va bazati pe acest lucru
> (ca GetUserOf returneaza eroare pentru un pid care s-a terminat), deci
> puteti privi lipsa cleanup-urilor din cod ca un mod de a impune un
> comportament corect.
>
> Ca sa verifici daca asta era cauza comportamentului aparent incorect,
> adauga dupa WaitForSingleObject clean-up corespunzator:
> CloseHandle(pi.hProcess); CloseHandle(pi.hThread);
>
> Octavian
>
> [1] http://msdn.microsoft.com/en-us/library/ms682429(VS.85).aspx<http://msdn.microsoft.com/en-us/library/ms682429%28VS.85%29.aspx>
> _______________________________________________
> 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/lurker/list/pso.html/attachments/20100325/62fda25b/attachment.htm>


More information about the pso mailing list