0

После того как я успешно создаю нового пользователя, добавьте пользователя во встроенную группу admins, я бы хотел отредактировать вновь созданный пользовательский реестр (эта программа является программой с повышенными правами) , Я позвонил NetUserAdd(), NetLocalGroupAddMembers(), LogonUser(), а затем, наконец, LoadUserProfile(), поэтому каталог пользователя существует.RegOpenCurrentUser (KEY_WRITE) для вновь созданного пользователя

извинить неряшливый код, но это то, что я делаю после того, что:

DuplicateTokenEx(hToken,TOKEN_ALL_ACCESS,&sa,SecurityImpersonation,TokenPrimary,&hNewToken); 
ImpersonateLoggedOnUser(hNewToken); 

HKEY hKey; 
LSTATUS stat = RegOpenCurrentUser(KEY_READ|KEY_WRITE, &hKey); 
// stat is 5 (ACCESS_DENIED) when KEY_WRITE is added, it 
// returns 0 (ERROR_SUCCESS) when it's just KEY_READ 

RegCloseKey(hKey); 
RevertToSelf(); 

CloseHandle(hNewToken); 

ошибка находится на RegOpenCurrentUser() линии. Это ошибка, когда я прошу записать в реестр HKU этого пользователя. Он отлично работает, если я использую только KEY_READ

Возможно ли это, что я пытаюсь сделать? Является ли еще еще созданный куст реестра пользователя? Или пользователь должен физически войти, чтобы создать его?

В конечном итоге то, что я хотел бы сделать, это создать объект групповой политики для нового пользователя.

ответ

1

Если у вас уже есть профиль пользователя, загруженный LoadUserProfile(), вам действительно не нужно использовать RegOpenCurrentUser(). Вместо этого вы можете использовать hProfile поле из PROFILEINFO что LoadUserProfile() возвращений:

hProfile
Тип: HANDLE

Дескриптор ветви реестра HKEY_CURRENT_USER.

...

Когда вызов LoadUserProfile возвращается успешно, член hProfile получает ключ реестра ручки открыта в корень поддерева пользователя, который был открыт с полным доступом (KEY_ALL_ACCESS).

+0

Большое вам спасибо! Вы сделали все намного проще и прямо. – Andy

 Смежные вопросы

  • Нет связанных вопросов^_^