Я использую ExpandEnvironmentStringsForUser , чтобы расширить каталог, который включает переменную среды.Однако возвращаемое значение иногда неверно.
Мой процесс выполняется с системной привилегией.
Например:
Входная строка: "C: \Пользователи \% username% \ Documents \ "
Выходная строка (возможно, одна из следующих строк)
C: \ Users \ cuong.huynh\ Documents \ (ожидаемый вывод)
C: \ Users \ cuong.huynh \ AppData \ Roaming (неверно)
C: \ Program Files \ Common Files (неверно)
Мой краткий код выглядит следующим образом:
DWORD dwSessionID = WTSGetActiveConsoleSessionId();
WTSQueryUserToken(dwSessionID, &hUserToken);
DuplicateToken(hUserToken, SecurityImpersonation, &hDuplicated)
hToken = hDuplicated;
LPCWSTR DesPath = (StringUtil::StrToWstr(setting)).c_str(); //(input)
wchar_t ExpandedDesPath[MAX_PATH]; //(output)
ExpandEnvironmentStringsForUser(hToken, DesPath, ExpandedDesPath, MAX_PATH - 1)
Кто-нибудь знает причину, по которой вывод нестабилен?