ExpandEnvironmentStringsForUser() API does not expand the environment variable %USERNAME% on Windows 7 and Windows Server 2008 R2, if hToken value is obtained only by using TOKEN_IMPERSONATE | TOKEN_QUERY flags for OpenProcessToken. To expand the environment variables like %USERNAME% on Windows 7 & Windows Server 2008 R2, you also need to add TOKEN_DUPLICATE as well.
For application that may run on all versions of Windows, it is recommended that you obtain the token handle with all 3 access rights: TOKEN_QUERY, TOKEN_DUPLICATE and TOKEN_IMPERSONATE
if (ret == FALSE)
ExpandEnvironmentStringsForUser(hProcessToken, L"%USERNAME%", (LPWSTR)envBuf,