Обновление куста HKEY_CURRENT_USER от службы

Я пишу провайдеру сети (Windows 7) для захвата имени домена и имени пользователя, и я должен сохранить это в HKEY_CURRENT_USER\Software\MyApp\Profile

Поскольку сетевой поставщик работает как служба, данные хранятся в папке HKEY_USER\.Default\Software\MyApp\Profile.

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

Как это вообще делается? Как мне сохранить данные в текущем улей пользователей из службы.

2 ответа

Решение

Мне удалось сделать это.

Я сделал LogonUser, LoadUserProfile и ImpersonateLoggedOnuser. LoadUserProfile вернет структуру PROFILEINFO. Член hProfile PROFILEINFO является фактическим корнем HKCU, который должен использоваться.

Вызов LogonUser будет рекурсивно запускать провайдера сети, чтобы заблокировать необходимость проверки lpStationName из аргумента NPLogonNotify, если его "SvcVtl" затем прервет рекурсию. Ищите документ MSDN для более подробной информации о NPLogonNotify.

когда все операции с реестром завершены, вызовите UnLoadUserProfile, RevertoToSelf, closeHandle(токен)

Вам необходимо получить токен пользователя (позвоните OpenProcess затем OpenProcessToken), выдать себя за свою нить этим токеном и использовать RegOpenCurrentUser функция для открытия реестра пользователей.

Также вы можете узнать SID пользователя и открыть HKEY_USER\<SID>,

Другие вопросы по тегам