-1

Я знаю, что HKCU является ссылкой на HKU\<SID> текущего пользователя, вошедшего в систему.

Как я могу определить, на какой профиль пользователя ссылается текущий экземпляр HKCU? Могу ли я определить это из удаленной командной строки?

Мне нужно изменить настройку в ветви реестра HKCU текущего пользователя, вошедшего в систему, на удаленном ПК с Windows 7 Pro. К сожалению, я не могу подключиться с помощью функции удаленного реестра в regedit.exe . У меня есть доступ к удаленной командной строке через PSEXEC .

2 ответа2

1

Проблема, которую я вижу, состоит в том, что существует не только один HKCU, но и HKCU для каждого из пользователей, вошедших в систему, включая учетные записи служб.

Имея доступ к psexec , если у вас под рукой есть handle.exe (также из sysinternals), вы можете попробовать

handle .log1

чтобы показать файлы log связанные с файлами .dat открытого куста. Зная .dat , ключи под

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\hivelist

должен указывать на искомый sid

0

Вот мое предложение: два способа получения SID на локальном компьютере XP и Win7. Добавлено имя пользователя из разных источников для проверки.

Как работает сценарий: основная идея возникает из познания, которое:

№ 1 Улей профиля пользователя (HKEY_CURRENT_USER , сокр. HKCU) монтируется в реестр после входа пользователя в систему, а HKCU является псевдонимом (псевдонимом) только для раздела реестра HKEY_USERS\<SID> , где <SID> сокращает идентификатор безопасности (SID) для учетной записи пользователя.

№ 2 Можно увидеть список всех кустов реестра, которые в настоящее время смонтированы под любым именем, в качестве значений в следующем разделе реестра. Здесь значение name устанавливает внутренний путь к реестру (и содержит <SID> для подпути в HKEY_USERS), а значение data - это путь к вспомогательному файлу (файлам) куста (а вспомогательный файл текущего пользователя всегда ntuser.dat):HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\hivelist

№ 3 Соответствие имени пользователя и <SID> можно найти в WMIC .

№ 3а. (Честно говоря, есть и раздел реестра, но этот ключ пока отсутствует в сценарии: предполагается, что это ToDo)HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList

Краткое описание процедуры: сценарий ищет совпадения среди трех источников, упомянутых выше в аксиомах № 1 и № 3, всегда с элементами в ключе hivelist (ср. № 2)

Как выглядит вывод скрипта и соответствуют критериям

Глава 0 .HKLM ...\Winlogon по умолчанию. Нет поиска. Выводит только переменную среды %USERNAME% и некоторые пользовательские значения из следующего раздела реестра:HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon

Глава 1 . wmic SID => HKLM ...\hivelist. Ищет каждый SID из запроса WMIC (# 3) на совпадение в имени значения # 2.

Глава 2 .HKU SID => HKLM ...\hivelist. Ищет каждый SID из HKEY_USERS\<SID> (# 1) на совпадение в имени значения # 2. Дает ложное положительное совпадение для <SID>_Classes

Глава 3 .% USERNAME% => HKLM ...\hivelist. Ищет %USERNAME% для совпадения в данных значения # 2. Может быть обновлено для поиска каждого имени пользователя # 3, но сопоставление по SID считается более надежным.

Глава 4 .ProfileList SID => HKLM ...\hivelist (ToDo): Ищет каждый SID из раздела реестра ProfileList(# 3a) на совпадение в имени значения # 2.

@ECHO OFF >NUL
@rem SETLOCAL enableextensions enabledelayedexpansion
@echo .
@echo . HKLM^\...^\Winlogon defaults:
@echo .
@echo        UserName     "%USERNAME%" ^(environment^)
call :regquery DefaultUserName "   "
call :regquery DefaultDomainName "                "
call :regquery AltDefaultUserName ""
call :regquery AltDefaultDomainName "             "

@echo .
@echo . wmic SID =^> HKLM^\...^\hivelist:
@echo .
@echo user "%USERNAME%" ^(environment^)
@wmic USERACCOUNT GET name, sid >getvmic.txt
if EXIST getvmic.txt (
  for /F "tokens=1,2" %%G in ('type getvmic.txt') do (
    for /F "tokens=1,2*" %%K in ('reg query ^"HKLM^\SYSTEM^\CurrentControlSet^\Control^\hivelist^" /v ^\REGISTRY^\USER^\%%H 2^>NUL ^| FIND /I "%%H"') do (
      if "%%M"=="" ( 
        @echo OFF >NUL
    ) else (
        for /F "tokens=4* delims=^\" %%P in ("%%M") do (
        @echo user "%%G" ^(wmic^)
        @echo user "%%P" ^(hivelist^)
        @echo SID  "%%H" ^(wmic^) 
        for /F "tokens=3* delims=^\" %%S in ( "%%K") do @echo SID  "%%S" ^(hivelist^)
) )
      for /F "tokens=1,2* delims=^\" %%P in ('reg query ^"HKU^" 2^>NUL ^| FIND /I "%%H"') do (
        If /I "%%Q"=="%%H" @echo SID  "%%Q" ^(HKU^)
) ) ) )

@echo .
@echo . HKU SID =^> HKLM^\...^\hivelist:
@echo .
  for /F "tokens=1,2* delims=^\" %%G in ('reg query ^"HKU^" 2^>NUL') do (
    for /F "tokens=1,2*" %%K in ('reg query ^"HKLM^\SYSTEM^\CurrentControlSet^\Control^\hivelist^" /v ^\REGISTRY^\USER^\%%H 2^>NUL ^| FIND /I "%%H"') do (
      if "%%M"=="" ( 
        @echo OFF >NUL
      ) else (
        for /F "tokens=4* delims=^\" %%P in ("%%M") do (
        if "%%P"=="%USERNAME%" (
          @echo user "%USERNAME%" ^(environment^)
          @echo user "%%P" ^(hivelist^)
          if EXIST getvmic.txt (
            for /F "tokens=1,2" %%W in ('type getvmic.txt ^| FIND /I "%%P"') do (
              @echo user "%%W" ^(wmic^)
              if "%%X"=="%%H" @echo SID  "%%X" ^(wmic^)
          ) ) 
          @echo SID  "%%H" ^(HKU^)
          for /F "tokens=3* delims=^\" %%S in ( "%%K") do @echo SID  "%%S" ^(hivelist^) 
) ) ) ) ) 

@echo .
@echo . %%USERNAME%% =^> HKLM^\...^\hivelist:
@echo .
@echo user "%USERNAME%" ^(environment^)
for /F "tokens=*" %%K in ('reg query ^"HKLM^\SYSTEM^\CurrentControlSet^\Control^\hivelist^" 2^>NUL ^| FIND /I "%USERNAME%" ^| FIND /I "ntuser.dat"') do (
  for /F "tokens=1,3,7 delims=^\" %%L in ("%%K") do (
    @echo user "%%N" ^(hivelist^)
  for /F %%S in ("%%M") do (
    for /F "tokens=1,2* delims=^\" %%T in ('reg query ^"HKU^" 2^>NUL ^| FIND /I "%%S"') do (
      if /I "%%S"=="%%U" (
        if EXIST getvmic.txt (
          for /F "tokens=1,2" %%W in ('type getvmic.txt ^| FIND /I "%%U"') do (
            @echo user "%%W" ^(wmic^)
            @echo SID  "%%X" ^(wmic^)
        ) )
      @echo SID  "%%U" ^(HKU^)
) ) 
    @echo SID  "%%S" ^(hivelist^)
) ) )
goto :eof

:regquery
for /F "tokens=1,3*" %%S in ('reg query ^"HKLM^\SOFTWARE^\Microsoft^\Windows NT^\CurrentVersion^\Winlogon^" /v %1 2^>NUL ^| FIND /I "%1"') do (
@echo %%S %~2 "%%T" ^(Winlogon^)
)
exit /B

Надежда может быть полезной, хотя я не знаю, под какими учетными данными пользователя работает psexec .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .