Программное создание профиля пользователя Windows

Я пытаюсь сделать что-то похожее на то, что пытается сделать пользователь, задавший этот вопрос:

HTTPS-запрос из библиотеки DLL поставщика учетных данных

Что касается компонентов профиля пользователя, я нашел это.

  • Какой минимальный профиль Windows распознает и загрузит?
  • Как создать и зарегистрировать профиль в Windows?

Моя цель - Windows 7 (Professional или Enterprise). Я больше увлекаюсь Linux, поэтому я не совсем разбираюсь в программировании в Windows, так что будьте осторожны.

P.S. Есть ли способ начать разработку в Linux, а затем протестировать в Windows без использования виртуальной машины?

Это то, что я пытаюсь сделать

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

  • Бизнесмены, которые часто ездят из одного офиса в другой
  • Студенты, которые каждый день используют разные компьютеры
  • Пользователи интернет-кафе в зарубежных странах
  • Домашние пользователи, которым не нравится копировать файлы, когда они покупают новый компьютер

Я хочу обеспечить максимально удобное взаимодействие с пользователем, а это означает почти мгновенное создание профиля. Профили в роуминге в лучшем случае медленные и содержат ошибки. Разрешение Windows создать профиль на самом деле не вариант, потому что мне нужно выполнить пользовательскую аутентификацию (я понял это), и мне нужно скопировать настройки с сервера.

Мне нужен способ:

  • Создавайте только самое необходимое при входе пользователя в систему
  • Обновите настройки из облака, если профиль был обновлен
  • Заставьте пользователя перейти с экрана входа в систему менее чем за 30 секунд (желательно намного быстрее)

Вот что я собираюсь сделать:

  • Аутентифицировать пользователя с сервером
  • Обратитесь в службу Windows для создания / обновления профиля.
  • служба Windows загрузит простые настройки при создании профиля
  • Настройки применяются
  • Пользователь авторизован

person beatgammit    schedule 02.04.2011    source источник


Ответы (2)


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

Основная идея профилей пользователей проста и остается неизменной, начиная с первой версии Windows NT (я имею в виду Windows NT 3.1): профиль пользователя состоит из структуры каталогов, существующей на локальном компьютере. Один файл (так называемый куст) из профиля пользователя представляет текущую пользовательскую часть реестра. Важно, чтобы у пользователя был полный доступ к своему профилю пользователя. Разрешение на доступ сохраняется не только в файловой системе, но и внутри реестра. Таким образом, чтобы создать профиль для пользователя, необходимо предварительно создать учетную запись пользователя, потому что часть дескриптора безопасности файлов ключей реестра должна содержать SID (идентификатор безопасности) пользователя.

Если будет создан новый профиль пользователя, в качестве шаблона будет использоваться «прототип» профиля пользователя. Путь к шаблону можно найти в реестре как значение Default в разделе реестра HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList. Вы можете использовать GetDefaultUserProfileDirectory, чтобы получить ту же информацию.

Чтобы создать профиль, необходимо войти в систему с учетной записью пользователя, чтобы получить токен входа (см. LogonUser с LOGON32_LOGON_INTERACTIVE для параметра dwLogonType), а затем используйте LoadUserProfile, который создаст профиль локального пользователя, если он не существует для пользователя. Если у пользователя есть центральный или перемещаемый профиль, необходимо ввести PROFILEINFO структурирует lpProfilePath так, чтобы он указывал на путь к перемещаемому профилю пользователя, который находится на сервере. Чтобы получить путь, можно использовать NetUserGetInfo с dwLevel равным 4. Этот способ очень старый и описано, например, здесь.

Поскольку токен входа от [LogonUser] действительно нужен только для получения SID пользователя, необходимого для выдачи прав пользователя на его файлы и ключи реестра, начиная с Vista Microsoft представила еще один упрощенный и очень практичный API CreateProfile, который заменяет CreateUserProfileEx (которые существуют только в Windows XP).

Все, что я объяснял ранее, действительно необходимо только в редких ситуациях. В основном, только если вы используете учетную запись пользователя для службы Windows. В стандартной ситуации профиль пользователя будет автоматически создан при первом интерактивном входе пользователя на компьютер.

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

Если вы объясните более точно, зачем вам нужно создавать профили пользователей, я, вероятно, мог бы предложить вам какой-нибудь альтернативный способ архивирования тех же целей.

person Oleg    schedule 07.04.2011
comment
Большое спасибо за быстрый ответ !! Я отмечу ваше как правильное. Я добавил к своему вопросу. Любые дополнительные указания, которые вы могли бы мне дать, были бы очень полезны. Большое спасибо за обстоятельный ответ. - person beatgammit; 08.04.2011
comment
Мне нужно подождать до завтра, чтобы наградить тебя наградой. Еще раз спасибо! - person beatgammit; 08.04.2011
comment
Всего несколько заметок. LOGON32_LOGON_INTERACTIVE не является обязательным, и он также будет работать с LOGON32_LOGON_NETWORK. Во всех современных версиях Windows вам нужно будет запустить приложение от имени администратора (олицетворение не сработает). - person Adi Roiban; 25.05.2012
comment
@AdiRoiban: Вопрос касался создания профиля пользователя. Войти с помощью LOGON32_LOGON_NETWORK можно быстро, но он не делает многих важных вещей, которые могут понадобиться для сгенерированного профиля. Например, интерактивный вход требует дополнительных затрат на кэширование информации для входа в систему для отключенных операций. Это может быть очень важно для ноутбуков, особенно для сценария с службой Windows (см. Текст вопроса). - person Oleg; 25.05.2012
comment
Спасибо за объяснение. В документации для LoadUserProfile указано, что вызывающий должен иметь права SE_RESTORE_NAME и SE_BACKUP_NAME, а в последней версии Windows это должен быть администратор. В Windows 2008 Server я мог использовать LoadUserProfile как пользователь без прав администратора, который имел права SE_RESTORE и SE_BACKUP, и запускать приложение, используя Запуск от имени администратора. - person Adi Roiban; 25.05.2012

Я задал очень аналогичный вопрос о ServerFault, и мне очень понравился ответ, который я там получил. Перефразируя, вот шаги:

  • Создать службу Windows для создания профилей
  • Создайте собственный ICredentialsProvider и аутентифицируйте пользователя
  • Позвоните в службу создания анкеты
  • Скажите Windows продолжить вход в систему

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

Поскольку никто не прокомментировал и не оставил ответа, я немного изменю свой вопрос.

person beatgammit    schedule 06.04.2011