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

Example:

 
OpenProcessToken(hProcess,TOKEN_IMPERSONATE|TOKEN_QUERY|TOKEN_DUPLICATE,& 
hProcessToken);
if (ret == FALSE)
return GetLastError();
ExpandEnvironmentStringsForUser(hProcessToken, L"%USERNAME%", (LPWSTR)envBuf, 
ENV_BUF_SIZE);

-Shree

Windows SDK