Как получить доступ к реестру HKCU для зарегистрированных пользователей (ов) из службы?

Внутри службы Windows я хочу проверить некоторые пользовательские настройки, которые хранятся в области реестра HKCU каждого пользователя. Как я могу это сделать?

Я вижу, что у HKEY_USERS есть подразделы каждого пользователя, который вошел в систему на машине (или что-то в этом роде?), и внутри них есть области HKCU для каждого пользователя. Тем не менее, эти подразделы являются идентификаторами SID пользователей, поэтому мне как-то нужно будет определить SID для зарегистрированных пользователей (ов).

Затем я запрошу HKEY_USERS\<the users SID>\whichever\key\i\need вместо запроса HKEY_CURRENT_USER\whichever\key\i\need.

Из этот вопрос Я могу получить список текущих пользователей на компьютере в формате DOMAIN\USER. Есть ли способ получить SID пользователя от входа в Windows? Или существует ли более прямой способ получить путь реестра, который является HKCU для зарегистрированных пользователей (ов)?

Ответ 2

В HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList вы найдете SID существующих профилей. Профиль ProfileImagePath даст путь к профилю.

В большинстве случаев этот путь является именем пользователя. Но это может быть другой путь, если аналогичный путь уже существовал при создании профиля.

Короткие SID, такие как S-1-5-18 (= > Локальная система), являются локальными учетными записями по умолчанию (https://support.microsoft.com/en-us/kb/243330)

Ответ 3

Для этого вам нужно будет сделать одно из следующих

  • Выдавайте себя за учетные данные пользователей и получите доступ к HKCU из этого контекста олицетворения
  • Прочитайте файл реестра непосредственно с диска (это имеет последствия для потоковой передачи и целостности данных).

Я не уверен на 100%, что # 1 будет работать, но я верю, что это будет.

Для любого решения, хотя вам потребуется либо учетные данные пользователей, либо токен доступа в вашем процессе. Это непросто, потому что это проблема безопасности.

Ответ 4

Вы можете подключиться к своему удаленному реестру, а затем выполнить поиск всего ключа HKU для своего имени пользователя (то есть jsmith). Различные записи ссылаются на их профиль пользователя; они появятся, тогда вы можете просто посмотреть, под каким SID находятся эти записи. Немного окольного способа сделать это, но, похоже, работает.