Обновление куста 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>
,