Не получается записать данные в реестр другого пользователя под WinXP. Что интересно, под Win7 этот код работает замечательно.
Логин-пароль известны, пользователь локальный.
Делаю так:
if (!LogonUser(sLogin.c_str(), ".", sPswd.c_str(), LOGON32_LOGON_INTERACTIVE,
LOGON32_PROVIDER_DEFAULT, &hToken))
throw NULL;
PROFILEINFO ProfInf = {0};
ProfInf.dwSize = sizeof(PROFILEINFO);
ProfInf.lpUserName = "Test1";
if (!LoadUserProfile(hToken, &ProfInf))
err = GetLastError();
if (!ImpersonateLoggedOnUser(hToken))
throw NULL;
// На всякий случай проверяем имя текущего пользователя
char szUserName[MAX_PATH] = {0};
DWORD dwLen = MAX_PATH;
GetUserName(szUserName, &dwLen);
if (RegOpenCurrentUser(KEY_ALL_ACCESS, &hUserKey) == ERROR_SUCCESS)
bRet = true;
...............................................
if (RegOpenKeyEx(hUserKey,
REG_POOL_KEY,
0,
KEY_ALL_ACCESS,
&hKey) != ERROR_SUCCESS)
...............................................
Все вызовы отрабатывают без ошибок и имя пользователя вроде как везде меняется правильно, но в реестре у этого пользователся ничего не меняется.
Запустил Process Explorer:
USERPROFILE показывает другого польователся
а вот
USERNAME остается прежним.
В чем может быть проблема? Я уверен, что это задача тривиальная и многие должны были ее реализовывать по 100 раз, но почему-то на рсдн-е никто ничего толкового так и не посоветовал... Может все-таки здесь найдутся знатоки WinAPI под WinXP? Помогите, пожалуйста!