Autor
|
Tema: Extraño error, puedo imprimir el texto pero no copiarlo. (Leído 2,209 veces)
|
kworld
Desconectado
Mensajes: 30
|
Quisiera que por favor alguien me ayudara con este código, logró obtener el texto que se necesita, pero no logro copiarlo a otro buffer. #include <windows.h> UCHAR* getUserSid(); int main(int argc, char *argv[]) { UCHAR* userSid; userSid = getUserSid(); return 0; } UCHAR* getUserSid() { HANDLE token = NULL; DWORD dwBufferSize = 0; PTOKEN_USER pTokenUser = NULL; HANDLE currentProcess = NULL; UCHAR* userSid = NULL; currentProcess = GetCurrentProcess(); if (OpenProcessToken(currentProcess, TOKEN_QUERY, &token)) { GetTokenInformation(token, TokenUser, NULL, 0, &dwBufferSize); pTokenUser = (PTOKEN_USER )malloc(dwBufferSize ); memset(pTokenUser , 0, dwBufferSize ); if (GetTokenInformation(token, TokenUser, pTokenUser, dwBufferSize, &dwBufferSize)) { if (IsValidSid(pTokenUser->User.Sid)) { UCHAR* localSID = NULL; size_t len; if (ConvertSidToStringSidA(pTokenUser->User.Sid, &localSID)) { printf("%s\n",localSID ); //esto se imprime bien printf("Len:%d\n",len ); //esto se imprime bien userSid = (UCHAR *) malloc(len +1, sizeof(UCHAR )); if (userSid != NULL) { printf("memoria dinamica bien\n"); //esto se imprime bien userSid[len] = 0; } printf("%s\n",userSid ); //esto NO SE IMPRIME BIEN LocalFree(localSID); } } } CloseHandle(token); } CloseHandle(currentProcess); return userSid; }
|
|
|
En línea
|
|
|
|
nicolas_cof
Desconectado
Mensajes: 348
Into the Wild
|
Mmmmm porque estas usando malloc como si fuera un calloc userSid = (UCHAR*) malloc(len+1, sizeof(UCHAR)); tendria que quedar asi... userSid = (UCHAR*) malloc((len+1) * sizeof(UCHAR)); No te dio ningun error al compilar? Otra pregunta windows.h sirve para las funciones printf(), malloc() y free(), porque de no ser asi te estarias olvidando de poner las librerias.. #include <stdio.h> #include <stdlib.h> Salu10.
|
|
« Última modificación: 29 Mayo 2010, 11:28 am por nicolas_cof »
|
En línea
|
|
|
|
kworld
Desconectado
Mensajes: 30
|
gracias. Haciendo pruebas lo solucioné así: #include <windows.h> UCHAR* getUserSid(); int main(int argc, char *argv[]) { UCHAR* userSid; userSid = getUserSid(); if (userSid != NULL) { } return 0; } UCHAR* getUserSid() { HANDLE token = NULL; DWORD dwBufferSize = 0; PTOKEN_USER pTokenUser = NULL; HANDLE currentProcess = NULL; UCHAR* userSid = NULL; currentProcess = GetCurrentProcess(); if (OpenProcessToken(currentProcess, TOKEN_QUERY, &token)) { GetTokenInformation(token, TokenUser, NULL, 0, &dwBufferSize); pTokenUser = (PTOKEN_USER )malloc(dwBufferSize ); memset(pTokenUser , 0, dwBufferSize ); if (GetTokenInformation(token, TokenUser, pTokenUser, dwBufferSize, &dwBufferSize)) { if (IsValidSid(pTokenUser->User.Sid)) { BOOL WINAPI ConvertSidToStringSidA(PSID, UCHAR*); ConvertSidToStringSidA(pTokenUser->User.Sid, (UCHAR*)&userSid); } } CloseHandle(token); } CloseHandle(currentProcess); return userSid; }
|
|
« Última modificación: 29 Mayo 2010, 18:34 pm por kworld »
|
En línea
|
|
|
|
|
|