Windows中用户配置文件的唯一标识符

时间:2009-04-24 20:17:07

标签: windows language-agnostic network-programming registry uniqueidentifier

对于客户端/服务器应用程序,我需要集中存储通常进入用户配置文件目录的部分配置信息。

客户端应用程序首先会使用GUID将文件或注册表项写入当前配置文件。此GUID随后将用作服务器上配置数据库中的密钥。

现在我想知道Windows用户配置文件是否已经具有我可以使用的唯一标识符,而不是生成我自己的GUID。

用户名无效,因为用户可能有多个个人资料。将它与计算机名称组合将无法正常工作,因为可能存在漫游配置文件。


更新

我只是查看了同一域中两台计算机上HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\ProfileList中的SID。漫游未启用,因此我的用户帐户在每台计算机上都有一个单独的配置文件。两个配置文件都列出了相同的SID。这意味着我必须继续生成自己的GUID。

4 个答案:

答案 0 :(得分:4)

Windows用户和组使用安全标识符(SID)。

  

安全标识符(SID)是   可变长度的唯一值   用于识别安全性   Windows中的主体或安全组   操作系统。

Windows内置了list of predefined SIDs。通过将当前计算机(随机生成的,96位)SID与递增数字组合来生成其他SID。

在计算机上拥有帐户的用户的SID存储在HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\ProfileList

下的注册表中

样本SID(取自The Microsoft policy concerning disk duplication of Windows XP installations):

以下示例显示四个本地用户帐户的SID。请注意,添加新帐户时,只会增加最后四位数字。

  • S-1-5-21-191058668-193157475-1542849698-500管理员
  • S-1-5-21-191058668-193157475-1542849698-1000用户1
  • S-1-5-21-191058668-193157475-1542849698-1001用户2
  • S-1-5-21-191058668-193157475-1542849698-1002用户3

由于生成SID的方式,它们应该是唯一的。由于它们是Windows配置文件系统的一部分,因此漫游配置文件在每个系统上都应具有相同的SID。

答案 1 :(得分:2)

您可以使用用户个人资料的安全标识符(SID)。

LookupAccountName() Win32 API将用户名和计算机名称作为输入,并返回关联的SID。

答案 2 :(得分:1)

R Bemrose和snowccrash是正确的,帐户SID正是您所要求的。你是正确的,为了使这个解决方案有效,你可以启用漫游配置文件;这就是为什么他们被称为漫游配置文件。

如果您不想使用域身份验证来识别用户,那么您的其他选项是WAS(Windows身份验证服务)。这通常但不一定在无处不在的ASPNETDB数据库中的Microsoft SQL Server上实现。

WAS是一个dotnet解决方案,具有对ASP.NET的精心支持,也可用于桌面软件。如果您不喜欢这样,您可以自己动手,但这对我来说似乎是资源的次优应用。如果你没有构建dotnet软件,你仍然可以利用WAS,但它不会那么方便。

答案 3 :(得分:1)

我可能会使用更多以LDAP为中心的解决方案解决此问题,但对您的应用来说可能会有更多工作。

AD中有一些独特的字段供用户使用。您可以使用用户记录的整个DN(即DC = com,DC =示例,CN = Users,DN = bob smith)。这就是AD中唯一标识记录的内容。但是,MS也有一个名为UPN的字段,它看起来像一个电子邮件地址(有时是),其格式为user @ domain。

当然,此信息需要对AD的读取权限,这可能对您的应用程序不切实际。