[问题定义]
发现一台Windows Server 2019的机器上创建任何用户都无法产生c:usersusername目录,登录时报:User Profile Service 服务登录失败 无法加载用户配置文件。目前Administrator用户操作正常,早期建立的一个用户正常,但新建的用户都不行,都报User Profile错误。
[问题解释]
当用户登录时,系统会调用User Profile Service(ProfSvc)并读取当前注册表中的profilelist找到对应用户的SID,然后开始在user文件夹中创建对应的用户profile文件夹。
如果存在登录用户文件夹则会根据文件夹配置桌面进行登录,如果文件夹损坏则会有问题。可以通过删除损坏的文件夹尝试解决。
如果不存在登录用户文件夹,则会根据Default文件夹复制生成,如果Default文件夹损失也会出现问题。可以从相同系统的机器中拷贝一个Default文件的到问题机器尝试解决。
根据检查是c:usersdefault里面的NTUSER.DAT*不见了,从正常系统拷贝了C:usersDefaultNTUSER.DAT*到原位置问题解决。
参考文档:
https://learn.microsoft.com/en-us/previous-versions/windows/desktop/legacy/bb776892(v=vs.85)
https://learn.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2003/cc757101(v=ws.10)
https://learn.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2003/cc737881(v=ws.10)
[更多信息]
关于注册表键值"HKLMSoftwareMicrosoftWindows NTCurrentVersionProfileGuid"
此键值记录了当前机器登录过的域账户的唯一标识符(GUID)和安全标识符(SID)的信息。
命令reg export "HKLMSoftwareMicrosoftWindows NTCurrentVersionProfileGuid" c:mslogsProfileGuid.txt是为了导出注册表键值HKLMSoftwareMicrosoftWindows NTCurrentVersionProfileGuid,检查机器之前登录的域账户信息。
当用户登录时,系统会调用User Profile Service(ProfSvc)并读取注册表中HKEY_LOCAL_MACHINESOFTWAREMICROSOFTWindows NTCurrentVersionProfileList找到对应用户的SID,然后开始在user文件夹中创建/加载对应的用户profile文件夹。
而如果没有在ProfileList找到对应的SID键值,Winlogon会再次尝试确定用户配置文件是否存在。即会检查HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVerisonProfileGuid下登录的域用户的GUID(唯一标识符)。
Winlogon makes one more attempt to determine if the user profile exist when it cannot locate neither registry keys. Winlogon does this by checking for the logging on user’s unique Identifier. Each domain user is assigned a unique identifier, in addition to a security identifier. Winlogon queries the domain for the currently logging on users unique identifier and then looks for a matching registry key at the following location : HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVerisonProfileGuid
如果GUID键值存在,读取对应的SidString可以获取用户的SID,然后再检查ProfileList下是否存在对应SID的注册表项,进而再次尝试加载用户配置文件等。
If the user’s unique ID registry key exists, then Winlogon looks up string registry value SidString , which is located under the currently logging on user’s unique ID registry key. Upon successfully reading this value, Winlogon then checks HKEY_LOCAL_MACHINESOFTWAREMICROSOFTWindows NTCurrentVersionProfileList for a registry key matching the recently read SID string.
此键值记录了当前机器登录过的域账户的唯一标识符(GUID)和安全标识符(SID)的信息。
经过测试,当机器加域后,域用户成功登录以后注册表中会生成此键值。不同的域账户登录后会记录对应的GUID注册表项。
而机器未加域,或者加域后未使用域账户登录,默认不会产生此ProfileGuid键值。