[pso] De ce exista notiunea de pseudo-HANDLE?

Bercea Gabriel gamitech at gmail.com
Sun Apr 12 13:18:38 EEST 2009


Andrei,
PseudoHandle-urile gen cel returnat de GetCurrentProcess, nu este un handle
real. Stiu ca parca era (HANDLE)-1, nu stiu se poate schimba nu e bine sa
hardcodezi asa ceva.
Drumul pana in kernel intradevar nu se se face pentru ca nu e creat de fapt
nici un handle.

In kernel astea sunt deja hadrcodate cu ZwCurrentProcess() si
ZwCurrentThread() , care tot (HANDLE)-1 sunt (nu folositi functiile care au
prefixul Nt in kernel mode).


In principiu ti-ai raspuns singur la intrebare. Bine de stiut, este ca au
AccessMode = PROCESS_ALL_ACCESS, si se pot duplica in handleuri reale, cu
DuplicateHandle. In kernel mode nu exista nici o rutina documentata care sa
permita duplicarea de handleuri insa se poate face foarte usor folosind
ObjectManagerul, si se pot crea handleuri UserMode si KernelMode, (you
choose the process context :) long live APC's)



Cu respect,
Bercea Gabriel 342 C2
Mobile contact:  (+40)0740049634
eMail: gamitech at gmail.com



-----Original Message-----
From: pso-bounces at cursuri.cs.pub.ro [mailto:pso-bounces at cursuri.cs.pub.ro]
On Behalf Of Andrei Ismail
Sent: Sunday, April 12, 2009 12:00 AM
To: pso at cursuri.cs.pub.ro
Subject: [pso] De ce exista notiunea de pseudo-HANDLE?


Salut,

Pe Windows, anumite functii, cum ar fi GetCurrentProcess(), intorc un
pseudo-HANDLE. Intrebarea mea este, de ce exista aceasta notiune?

Banuiala mea este ca pseudo-HANDLES au acelasi scop cu VDSO-urile pe Linux:
optimizarea apelurilor de sistem "light", pentru a evita un drum pana in
kernel si inapoi. Probabil ca s-a preferat introducerea unui if() in plus in
celelalte apeluri de sistem (if h == PSEUDO_HANDLE_FOR_CURRENT_PROCESS),
daca per total se obtine o viteza mai buna. Am dreptate?

Andrei


      
_______________________________________________
pso mailing list
pso at cursuri.cs.pub.ro
http://cursuri.cs.pub.ro/cgi-bin/mailman/listinfo/pso



More information about the pso mailing list