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.
Código (c) [Seleccionar]
#include <windows.h>
UCHAR* getUserSid();
int main(int argc, char *argv[])
{
UCHAR* userSid;
userSid = getUserSid();
printf("%s",userSid);
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
len = strlen(localSID);
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
strncpy(userSid, localSID, len);
userSid[len] = 0;
}
printf("%s\n",userSid); //esto NO SE IMPRIME BIEN
LocalFree(localSID);
}
}
}
free(pTokenUser);
CloseHandle(token);
}
CloseHandle(currentProcess);
return userSid;
}