public void UpdateRegistrySettings(CommandSettings command, string domainName, string userName, string logonPassword) { IntPtr userHandler = IntPtr.Zero; PROFILEINFO userProfile = new PROFILEINFO(); try { string securityId = _windowsServiceHelper.GetSecurityId(domainName, userName); if (string.IsNullOrEmpty(securityId)) { Trace.Error($"Could not find the Security ID for the user '{domainName}\\{userName}'. AutoLogon will not be configured."); throw new Exception(StringUtil.Loc("InvalidSIDForUser", domainName, userName)); } //check if the registry exists for the user, if not load the user profile if (!_registryManager.SubKeyExists(RegistryHive.Users, securityId)) { userProfile.dwSize = Marshal.SizeOf(typeof(PROFILEINFO)); userProfile.lpUserName = userName; _windowsServiceHelper.LoadUserProfile(domainName, userName, logonPassword, out userHandler, out userProfile); } if (!_registryManager.SubKeyExists(RegistryHive.Users, securityId)) { throw new InvalidOperationException(StringUtil.Loc("ProfileLoadFailure", domainName, userName)); } ShowAutoLogonWarningIfAlreadyEnabled(domainName, userName); //machine specific settings, i.e., autologon UpdateMachineSpecificRegistrySettings(domainName, userName); //user specific, i.e., screensaver and startup process UpdateUserSpecificRegistrySettings(command, securityId); } finally { if (userHandler != IntPtr.Zero) { _windowsServiceHelper.UnloadUserProfile(userHandler, userProfile); } } }