Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > Credentialprovider для windows 7


Автор: koldun90 12.4.2020, 14:10
Здравствуйте. пишу свой провайдер. Смысл в том что когда заходит доменный/локальный пользователь(первый раз)(логинится) в систему введя свой логин и пароль должна выполниться функция которая 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;    
        }
    }
}

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)