Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Как генерируются %USERPROFILE% и %USERNAME% ?

Модерирует : KLASS, IFkO

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

smartiom



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Прошу помочь с информацией связанной с переменными среды %USERPROFILE% и %USERNAME%.
Как известно, конкретное конечное значение для %USERPROFILE% строится динамически когда пользователь логинится и для каждого своя.  
 
Вопрос в том как конкретно генерируются эти переменные? из каких частей и переменных строится %USERPROFILE%? откуда берутся источники/части для этого? (скорее всево где-то из регистра, но там много всего, некоторые пути вписаны явно и полностью (C:\Windows\...), другие уже содержат переменные (%WinDir%\...), и.т.д.)
 
Также интересно узнать и про %USERNAME% и про %ALLUSERSPROFILE%.

Всего записей: 109 | Зарегистр. 17-03-2006 | Отправлено: 22:04 12-04-2017
ne_viens

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
HKEY_CURRENT_USER\Volatile Environment

Всего записей: 1525 | Зарегистр. 01-11-2004 | Отправлено: 11:19 13-04-2017
vek3262



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
smartiom чтобы узнать список переменных в вашем компьютере, откройте командную строку и введите команду:
Код:
set


Всего записей: 5413 | Зарегистр. 02-09-2012 | Отправлено: 11:38 13-04-2017 | Исправлено: vek3262, 11:39 13-04-2017
smartiom



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vek3262
Спасибо за ответ, но я прекрасно знаю про "set".
Если заметили, я спросил про совсем другое.
Многие переменные среды берутся прямо из регистра так как они там прописаны, но переменные как %USERPROFILE% являются специальными, они динамически строятся при определёных действиях, а не берутся сразу из одного места как например %ProgramFiles% что берётся из HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion>ProgramFilesDir.
 
ne_viens
В HKEY_CURRENT_USER\Volatile Environment нет ничего связанного с именем USERPROFILE. Там есть другие %APPDATA%, %HOMEDRIVE%, %HOMEPATH%, и.т.д.
Или вы намекаете что USERPROFILE = HOMEDRIVE + HOMEPATH? Даже если это так, то всё равно эти HOMEDRIVE и HOMEPATH берутся из другого места потому что в "Volatile Environment" они добавляются после ребута/логина и эти значения регистра хранятся только в оперативке и не сохраняются в хайвах.

Всего записей: 109 | Зарегистр. 17-03-2006 | Отправлено: 21:15 13-04-2017 | Исправлено: smartiom, 03:44 14-04-2017
nikhelfer

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
hklm\Software\Microsoft\Windows NT\ProfileList
Здесь хранится информация о профилях локальных пользователей компьютера.

Всего записей: 193 | Зарегистр. 16-08-2003 | Отправлено: 13:30 14-04-2017
smartiom



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
nikhelfer
То есть %USERPROFILE% = HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\[ProfilesDirectory] + %USERNAME% ?
Это предположение или точно известно? (я тоже думал/думаю что это главный кандидат, но это всего лишь предположение для которого ещё не нашёл документированых свидетельств)
 
И кто-нибудь знает где точно хранится USERNAME пользователя? в регистре его точно нет, я проверял (создал нового пользователя BlaBlaBla, в регистре поменял все значения BlaBlaBla на НоНоНо, но система всё равно знает что пользователь именуется BlaBlaBla хотя в регисте не найти это значение). Также его нет в "%SystemDrive%\Users", потому что после того как создаётся новый пользователь его папка в "Users" ещё отсутсвует, будет создана уже после рестарта или logoff-login.

Всего записей: 109 | Зарегистр. 17-03-2006 | Отправлено: 13:03 19-04-2017
ne_viens

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Нет, %USERPROFILE% =  
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\%sid%, "ProfileImagePath"
 
Значение присваивается в winlogon.exe в следующей последовательности:
winlogon.main();
 winlogon.SetProfilesLocation();
  profapi.GetBasicProfileFolderPath(5, 0, userprofilePath, MAX_PATH);
      profapi.GetSidStringFromSelf(sid); //sid = L"S-1-5-21-2821893254-1530714858-2690302199-500"
       profapi.vsnwprintf(regKey, L"%s\\%s", L"Software\\Microsoft\\Windows NT\\CurrentVersion\\ProfileList", sid);
        profapi.GetBasicProfileFolderPath(regKey);
         RegOpenKeyEx(regKey);
          RegQueryValueEx(L"ProfileImagePath")
           
   profapi.SetEnvironmentVariable(L"USERPROFILE", userprofilePath);

Всего записей: 1525 | Зарегистр. 01-11-2004 | Отправлено: 10:26 23-04-2017
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Как генерируются %USERPROFILE% и %USERNAME% ?


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru