Как получить доступ к реестру HKCU вошедших в систему пользователей из службы? - PullRequest
4 голосов
/ 02 марта 2010

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

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

Я бы тогда запросил HKEY_USERS\<the users SID>\whichever\key\i\need вместо запроса HKEY_CURRENT_USER\whichever\key\i\need.

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

Ответы [ 5 ]

2 голосов
/ 21 апреля 2015

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

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

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

2 голосов
/ 02 марта 2010

Вот пример преобразования имени пользователя в SID: Преобразование имени пользователя в строку SID в C # /. NET

1 голос
/ 17 марта 2010

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

1 голос
/ 02 марта 2010

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

  1. Олицетворение учетных данных пользователей и доступ к HKCU из этого контекста олицетворения
  2. Чтение файла реестра непосредственно с диска (это влияет на потоки и целостность данных).

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

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

0 голосов
/ 06 июня 2018

Используя PowerShell, вы можете сопоставить их:

Get-ItemProperty -path  "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\*" | select ProfileImagePath, PSChildName

enter image description here

Вы можете даже искать по имени пользователя (например, Джон):

Get-ItemProperty -path  "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\*" | ? {$_.ProfileImagePath -match "john"}  | select ProfileImagePath, PSChildName

Бонус: обратный поиск SID с помощью PowerShell (возвращает DOMAIN \ USERNAME)

$objSID = New-Object System.Security.Principal.SecurityIdentifier ("S-1-5-21-2139915555-1840087203-3974481593-26737")
$objUser = $objSID.Translate( [System.Security.Principal.NTAccount])
$objUser.Value
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...