4

我正在尝试做一些类似于提出这个问题的用户正在尝试做的事情:

来自凭据提供程序 DLL 的 HTTPS 请求

关于用户配置文件的组成部分,我发现了这个.

  • Windows 将识别和加载的最低配置文件是什么?
  • 如何在 Windows 中创建和注册配置文件?

我的目标是 Windows 7(专业版或企业版)。我更像是一个 Linux 人,所以在 Windows 上编程时我一无所知,所以请温柔一点。

PS 有没有一种方法可以让我在 Linux 上开始开发,然后在不使用 VM 的情况下在 Windows 上进行测试?

这就是我想要做的

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

  • 经常在办公室之间出差的商人
  • 每天使用不同计算机的学生
  • 国外网吧用户
  • 不喜欢在获得新计算机时复制文件的家庭用户

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

我需要的是一种方法:

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

这就是我想做的事情:

  • 使用服务器对用户进行身份验证
  • 联系 Windows 服务以处理配置文件创建/更新
  • Windows 服务将在创建配置文件时下载裸设置
  • 应用设置
  • 用户已登录
4

2 回答 2

7

首先,我建议您阅读有关用户配置文件的内容。

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

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

要创建配置文件,应使用用户帐户登录以获取登录令牌(请参阅LogonUser with LOGON32_LOGON_INTERACTIVEflag for the dwLogonTypeparameter),然后使用LoadUserProfile如果用户不存在本地用户配置文件,它将创建本地用户配置文件。如果用户有中央或漫游配置文件,则应填写输入PROFILEINFO结构,lpProfilePath以便它指向服务器上用户的漫游配置文件路径。要获取路径,可以使用等于4的NetUserGetInfo 。这种方式非常古老,例如在此处进行了描述。dwLevel

因为来自 [LogonUser] 的登录令牌实际上只需要获取用户 SID 需要授予用户对其文件和注册表项的权限,因此从 Vista 开始,Microsoft 引入了另一个简化且非常实用的 API CreateProfile,它替换了CreateUserProfileEx(仅存在在 Windows XP 上)。

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

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

如果您更准确地解释为什么需要创建用户配置文件,我可能会建议您使用一些替代方法来归档相同的目标。

于 2011-04-07T19:40:15.260 回答
1

我在 ServerFault 上问了一个非常相似的问题,我真的很喜欢我得到的答案。换句话说,这些是步骤:

  • 创建 Windows 服务以创建配置文件
  • 创建自定义 ICredentialsProvider 并验证用户
  • 调用配置文件创建服务
  • 告诉 Windows 继续登录

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

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

于 2011-04-06T09:04:19.527 回答