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