Программирование Windows профиля пользователя - PullRequest
4 голосов
/ 02 апреля 2011

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

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

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

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

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

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

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

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

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

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

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

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

Вот что я думаю сделать:

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

Ответы [ 2 ]

7 голосов
/ 07 апреля 2011

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

Основная идея профилей пользователей проста и остается неизменной, начиная с первой версии 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. В стандартной ситуации профиль пользователя будет автоматически создаваться при первом интерактивном входе пользователя в систему на компьютере.

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

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

0 голосов
/ 06 апреля 2011

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

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

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

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

...