Обновление куста HKEY_CURRENT_USER от службы - PullRequest
0 голосов
/ 18 ноября 2011

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

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

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

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

Ответы [ 2 ]

1 голос
/ 18 ноября 2011

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

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

0 голосов
/ 07 февраля 2012

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

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

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

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

...