Wolfgang Schwotzer <wolfgang.schwotzer(a)gmx.net> wrote:
+ size = 0; + GetUserNameW( NULL, &size ); + + user_name = HeapAlloc( GetProcessHeap(), 0, (size + 1) * sizeof(WCHAR) ); + if (!user_name) { + SetLastError(ERROR_OUTOFMEMORY); + return FALSE; + } + + if (!GetUserNameW( user_name, &size )) + { + HeapFree( GetProcessHeap(), 0, user_name ); + return FALSE; + } + + size = 0; + dom_size = 0; + LookupAccountNameW( NULL, user_name, NULL, &size, NULL, &dom_size, &use ); + + *needed = size; + if (info == NULL) + { + HeapFree( GetProcessHeap(), 0, user_name ); + return TRUE; + } + + if (len < size) + { + SetLastError( ERROR_NOT_ENOUGH_MEMORY ); + HeapFree( GetProcessHeap(), 0, user_name ); + return FALSE; + } + + dom_size = 0; + ret = LookupAccountNameW( NULL, user_name, (PSID)info, &size, NULL, &dom_size, &use ); + HeapFree( GetProcessHeap(), 0, user_name ); + return ret; + }
You need to test return value of every 1st call as well as you do for every next one. -- Dmitry.