程序化Windows用户配置文件创建

时间:2011-04-02 05:43:44

标签: windows windows-7 user-profile winlogon

我正在尝试做类似于提出此问题的用户尝试做的事情:

HTTPS Request From a Credential Provider DLL

关于用户个人资料的组件,我找到了this

  • Windows将识别并加载的最小配置文件是什么?
  • 如何使用Windows创建和注册个人资料?

我的目标是Windows 7(专业版或企业版)。我不仅仅是一个Linux人,所以在Windows上进行编程时我很无能为力,所以请保持温和。

P.S。有没有办法让我可以开始在Linux上开发,然后在不使用VM的情况下在Windows上进行测试?

这就是我要做的事情

我正在构建一个配置文件同步程序,供那些移动很多的人使用,这样他们就不必到处携带笔记本电脑。此问题解决了用户登录到新计算机的情况。可能的应用是:

  • 经常在办公室之间旅行的商人
  • 每天使用不同电脑的学生
  • 国外网吧用户
  • 不喜欢在购买新计算机时复制文件的家庭用户

我希望尽可能提供最佳用户体验,这意味着即时创建配置文件。漫游配置文件很慢并且充满了错误。让Windows创建配置文件并不是一个真正的选择,因为我需要进行自定义身份验证(我想出了这个),我需要从服务器复制设置。

我需要的是一种方法:

  • 仅在用户登录时创建基本要素
  • 如果配置文件已更新,则从云端更新设置
  • 让用户从登录屏幕在30秒内工作(最好快得多)

这就是我在想的事情:

  • 使用服务器验证用户
  • 联系Windows服务以处理配置文件创建/更新
  • Windows服务将在创建个人资料时下载裸设置
  • 已应用设置
  • 用户已登录

2 个答案:

答案 0 :(得分:7)

首先,我建议您阅读有关用户个人资料的this

用户配置文件的主要思想很简单,从第一版Windows NT(我的意思是Windows NT 3.1)开始保持不变:用户配置文件由本地计算机上现有的目录结构组成。用户配置文件中的一个文件(如此命名的配置单元)表示注册表的当前用户部分。用户对其用户配置文件具有完全访问权限非常重要。访问权限不仅保存在文件系统中,还保存在注册表的内部中。因此,要为用户创建配置文件,必须先创建用户帐户,因为注册表项文件的安全描述符部分必须包含用户的SID(安全标识符)。

如果将创建新用户配置文件,则用户配置文件的“原型”将用作模板。您可以在注册表中找到的模板路径为Default注册表项下的HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList值。您可以使用GetDefaultUserProfileDirectory获取相同的信息。

要创建配置文件,应使用用户帐户登录以获取登录令牌(请参阅LogonUser LOGON32_LOGON_INTERACTIVE参数的dwLogonType标记,然后使用LoadUserProfile如果用户不存在,将创建本地用户配置文件。如果用户具有中心或roaming profile,则应填写输入PROFILEINFO结构lpProfilePath,以便它指向服务器上用户的漫游配置文件路径。要获取路径,可以使用NetUserGetInfodwLevel等于4.这种方式非常陈旧,例如here

因为真正需要来自[LogonUser]的登录令牌才能获得大用户对其文件和注册表项所需权限所需的用户SID,从Vista开始Microsoft引入了另一种简化且非常实用的API CreateProfile它取代CreateUserProfileEx(仅存在于Windows XP上)。

我在之前解释的所有内容仅在极少情况下才真正需要。主要是仅当您使用Windows服务的用户帐户时。在标准情况下,用户配置文件将在计算机上的第一个交互式用户登录处自动创建

如果您需要对计算机上的所有用户进行一些更改,例如在安装新软件之后,您可以通过多种方式执行此操作,而无需创建用户配置文件。

如果您更准确地解释为什么,您需要创建用户个人资料,我可能会建议您使用另一种方法来存档相同的目标。

答案 1 :(得分:0)

我在ServerFault上问了一个非常similar question,我真的很喜欢我到那里的答案。换句话说,这些是步骤:

  • 创建Windows服务以创建配置文件
  • 创建自定义ICredentialsProvider并对用户进行身份验证
  • 调用个人资料创建服务
  • 告诉Windows继续登录

似乎没有直接的方式来覆盖它,但这似乎非常聪明,而且很可能是唯一的解决方案。

由于没有人评论或留下答案,我会稍微改变一下我的问题。