Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.04.2020, 19:18   #1
Koldun90
Пользователь
 
Регистрация: 16.05.2014
Сообщений: 12
По умолчанию credentialprovider для windws 7

Здравствуйте. пишу свой провайдер. Смысл в том что когда заходит доменный/локальный пользователь(первый раз)(логинится) в систему введя свой логин и пароль должна выполниться функция которая logonuser , затем я должен определить существует ли профиль пользователя или нет, если не существует(я захожу впервые) я должен создать профиль этого пользователя и поменять ему в реестре HKEY_CURRENT_USER\Control Panel\Desktop параметр wallpapper рисунок рабочего стола на свой произвольный.
Те в итоге должно получится такое я пользователя создал средствами ос(локально или в домене), потом я вхожу этим пользователем и у него картинка(обои на рабочем столе изменились) так в принципе можно сделать(на самом деле мне еще нужно потом будет изменить оболочку и еще кое какие переменные реестра). Возможно ли из контекста customcredentialprovaider.dll(моего провайдера) выполнить это?
вот примерные наработки
logounuser--авторизуюсь пользователем
с помощью функции GetUserProfileDirectory проверяю есть ли путь к профилю или нет, если пути нет то
с помощью функции LoadUserProfileA создаем профиль по умолчанию
и в итоге мы получаем hkey который имеет права на изменение и указывает на ветку реестра пользователя
и по нему мы уже соответственно меняем что нам надо
Код:
HANDLE gg;
BOOL rez = LogonUserA(username.c_str(), domainpref.c_str(), passwd.c_str(), LOGON32_LOGON_INTERACTIVE, 0, &gg);
if (rez)
{
        
    char dirpr[256];
    DWORD df = 256;
    rez = GetUserProfileDirectory(gg, dirpr, &df);
    if (!rez)
    {
        char nmp[256];
        sprintf(nmp, "%s", username.c_str());
        DWORD gh = GetLastError();
        PROFILEINFO prin;
        ZeroMemory(&prin, sizeof(prin));
        prin.dwSize = sizeof(PROFILEINFO);
        prin.lpUserName = nmp;
        prin.dwFlags = PI_NOUI;
        rez = LoadUserProfileA(gg, &prin);
        if (rez)
        {
            HANDLE hh = prin.hProfile;
            HKEY key = (HKEY)hh;    
        }
    }
}
Koldun90 вне форума Ответить с цитированием
Старый 12.04.2020, 21:44   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

По моему, если записать все нужные настройки в .DEFAULT ветку реестра они будут цепляться для всех новых учеток автоматически.
Можно еще проще - прописать в автозапуск HKLM и просто обычной прогой менять что нужно при входе в систему.
waleri вне форума Ответить с цитированием
Старый 12.04.2020, 22:05   #3
Koldun90
Пользователь
 
Регистрация: 16.05.2014
Сообщений: 12
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
По моему, если записать все нужные настройки в .DEFAULT ветку реестра они будут цепляться для всех новых учеток автоматически.
можно подробнее про это? Где находится .DEFAULT ветка реестра?
Цитата:
Сообщение от waleri Посмотреть сообщение
Можно еще проще - прописать в автозапуск HKLM и просто обычной прогой менять что нужно при входе в систему.
Здесь наверное такая ситуация возникнет мне в дальнейшем нужно будет сменить shell пользователя, а не только обои рабочего стола.
К тому же чтобы мне мне менять HKCU пользователя программно мне нужно выполнить Logonuser а пароль соответственно скрыт
Koldun90 вне форума Ответить с цитированием
Старый 12.04.2020, 22:24   #4
Koldun90
Пользователь
 
Регистрация: 16.05.2014
Сообщений: 12
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
все нужные настройки в .DEFAULT ветку реестра
можно shell изменить?
Koldun90 вне форума Ответить с цитированием
Старый 12.04.2020, 23:42   #5
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

Цитата:
Сообщение от Koldun90 Посмотреть сообщение
можно shell изменить?
Не пробовал.
А что мешает поменять shell для всех?
Shell может проверить от чьего имени он запущен и работать в нужных режимах.
И вообще, какова конечная цель?
waleri вне форума Ответить с цитированием
Старый 13.04.2020, 01:00   #6
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

Так, прошу прощения, .default не есть для новых учеток.
Профиль для новых учеток (целиком, не только реестр) лежит в C:\Users\Default
Монтируете реестр ntuser.dat, меняете что нужно, только не забудьте отмонтировать.

Ref:
https://devblogs.microsoft.com/oldne...02-00/?p=27783
waleri вне форума Ответить с цитированием
Старый 13.04.2020, 07:56   #7
Koldun90
Пользователь
 
Регистрация: 16.05.2014
Сообщений: 12
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
И вообще, какова конечная цель?
конечная цель новым пользователям в системе изменить shell, изменить(установить) несколько set переменных, изменить обои рабочего стола. Мне нужно чтобы только для новых пользователей применялись настройки.

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

Последний раз редактировалось Koldun90; 13.04.2020 в 12:07.
Koldun90 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск