[pso] [tema1]Problema GetUserOf

Alexandra Arcalianu arcalianualexandra at gmail.com
Thu Mar 25 22:39:08 EET 2010


Ai dreptate si eu am dat de aceeasi problema.
Adica daca implementez cu PsSetCreateProcessNotifyRoutine trec testul care
imi pica
dar nu mi se pare ca as putea trece in general testul de pid invalid. Pentru
mine un pid
pe care nu l-am vazut in rutina de notificare a terminarii unui proces este
un pid valid
chiar daca nu exista in sistem.

Stiu ca orice implementare in afara de varianta cu
PsSetCreateProcessNotifyRoutine a
devenit oficial incorecta, dar eu din enunt inteleg ca folosim aceasta
rutina cand un
proces se termina si trebuie sa il scoatem de exemplu din lista de piduri
monitorizate
pentru ca nu mai are ce cauta acolo. Nu vad partea unde se specifica ca un
pid invalid
se verifica folosindu-ne de PsSetCreateProcessNotifyRoutine.



În data de 25 martie 2010, 22:18, Octavian Rinciog <
octavian.rinciog at gmail.com> a scris:

> > 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.
>
> De ce ar fi o eroare? Programul meu de unde stie daca numarului
> 12000(un numar valid), i-a fost vreodata asignat un proces?
> Pe o astfel de implementare folosirea PsSetCreateProcessNotifyRoutine
> duce la erori, pentru din acea functie putem doar sa vedem ce procese
> se inchid si acele piduri nu mai sunt valide. Nu putem sa vedem
> numerele pentru care pana in momentul curent nu le-a fost asignat un
> proces.
>
> Î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
> >
>
>
>
> --
> Octavian Rinciog
> _______________________________________________
> 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/5fe1ade4/attachment-0001.htm>


More information about the pso mailing list