in PPLGuard/utils.cpp [493:525]
BOOL TokenGetUsername(HANDLE hToken, LPWSTR* ppwszUsername)
{
BOOL bReturnValue = FALSE;
PSID pSid = NULL;
const DWORD dwMaxSize = 256;
WCHAR wszUsername[dwMaxSize] = { 0 };
WCHAR wszDomain[dwMaxSize] = { 0 };
DWORD dwMaxUsername = dwMaxSize;
DWORD dwMaxDomain = dwMaxSize;
SID_NAME_USE type;
if (!TokenGetSid(hToken, &pSid))
goto end;
if (!LookupAccountSid(NULL, pSid, wszUsername, &dwMaxUsername, wszDomain, &dwMaxDomain, &type))
{
PrintLastError(L"LookupAccountSid");
goto end;
}
*ppwszUsername = (LPWSTR)LocalAlloc(LPTR, (dwMaxSize * 2 + 1) * sizeof(WCHAR));
if (!*ppwszUsername)
goto end;
StringCchPrintf(*ppwszUsername, dwMaxSize * 2 + 1, L"%ws\\%ws", wszDomain, wszUsername);
bReturnValue = TRUE;
end:
if (pSid)
LocalFree(pSid);
return bReturnValue;
}