[pso] [tema1][win] GetUserOf

Octavian Voicu octavian.voicu at gmail.com
Wed Apr 1 16:33:28 EEST 2009


Ca sa intelegi cum se folosesc, cel mai bine te uiti la sursa ca sa vezi
semnificatia parametrilor.
In implementarea GetUserOf din sci_win.h, parametrul al doilea este pasat
functiei ZwQueryInformationToken:

static NTSTATUS GetUserOf(HANDLE pid, TOKEN_USER **user)
...
 if (!(*user=ExAllocatePoolWithTag(NonPagedPool, len, 'ot1t'))) {
status=STATUS_NO_MEMORY; goto out; }  if
((status=ZwQueryInformationToken(token, TokenUser, *user, len, &len)) !=
STATUS_SUCCESS)

Dupa cum vezi, functia aloca bufferul si stocheaza pointerul catre memoria
alocata la adresa primita ca parametru.
Deci modul de folosire trebuie sa fie:

TOKEN_USER *user;
if (GetUserOf(pid, &user) != STATUS_SUCCESS) // err
// ...
ExFreePoolWithTag(user, 'ot1t');

Adica pasam functiei adresa unui pointer, si functia ne aloca un buffer si
scrie adresa pointerului catre zona de memorie alocata la adresa pe care
i-am dat-o noi (adresa variabilei user).

Free-ul se da pentru ca functia aloca un buffer, deci e responsabilitatea
codului apelant sa-l elibereze dupa ce a terminat de lucrat cu el, de
preferat folosind tag-ul cu care a fost alocata memoria.

Similar pentru GetCurrentUser.


2009/4/1 Mihai Bucicoiu <mihai.bucicoiu at gmail.com>

> nu prea inteleg cum se folosesc GetUserOf, si getCurrentuser;
>
> eu am facut asa, 2 token-uri pentru user curent si cel al unui pid
>
>
>     TOKEN_USER **user;
>     TOKEN_USER **user_current;
>
>     user = ExAllocatePoolWithTag(NonPagedPool,sizeof(TOKEN_USER *),'1usr');
>      user_current = ExAllocatePoolWithTag(NonPagedPool,sizeof(TOKEN_USER
> *),'2usr');
>
> in mom in care apelez ceva de genul
> *
> if (GetUserOf(pid,user) != STATUS_SUCCESS)
>         {
>             return STATUS_INVALID_PARAMETER;
>         }*
>
> intra mereu pe return .... unde gresesc ?
>
> mentionez ca pid = 0, syscall = primu din teste NtOpenMutant
>
> Mihai
>
> _______________________________________________
> pso mailing list
> pso at cursuri.cs.pub.ro
> http://cursuri.cs.pub.ro/cgi-bin/mailman/listinfo/pso
>
>


-- 
Octavian Voicu
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://cursuri.cs.pub.ro/pipermail/pso/attachments/20090401/83066177/attachment.htm>


More information about the pso mailing list