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

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

客户端应用程序在首次使用时将具有GUID的文件或registry项写入当前configuration文件。 此GUID随后将用作服务器上configuration数据库中的一个键。

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

用户名将不起作用,因为用户可能有多个configuration文件。 将它与计算机名称组合将不起作用,因为可能存在漫游configuration文件。

更新:

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

Solutions Collecting From Web of "Windows中用户configuration文件的唯一标识符"

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

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

有一个Windows内置的预定义SID列表 。 其他SID是通过将当前计算机的(随机生成的,96位)SID与递增的数字组合而生成的。

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

示例SID(摘自Microsoft有关Windows XP安装的磁盘复制的政策 ):

以下示例显示了四个本地用户帐户的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。

您可以使用用户配置文件的安全标识符(SID)。

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

R Bemrose和snowccrash是正确的,帐户SID正是你所要求的。 你是正确的,为了使这个解决方案工作,你很多使漫游配置文件; 这就是为什么他们被称为漫游配置文件。

如果您不想使用域身份验证来识别用户,则您的其他选项是WAS(Windows身份验证服务)。 这是典型的,但不一定在普遍的ASPNETDB数据库中的Microsoft SQL server上实现。

WAS是一个dotnet解决方案,精心支持ASP.NET,也可用于桌面软件。 如果你不喜欢这一点,你可以推出自己的,但这在我看来是一个资源不理想的应用。 如果你没有构建dotnet软件,你仍然可以利用WAS,但是不会那么方便。

我可能会使用更多以LDAP为中心的解决方案来解决这个问题,但是对于您的应用来说,这可能还有很多工作要做。

AD中有几个独特的字段供用户使用。 您可以使用用户记录的全部DN(即DC = com,DC = example,CN = Users,DN = bob smith)。 这就是在AD中唯一标识一条记录的方法。 但是,MS也有一个名为UPN的字段,它看起来像一个电子邮件地址(有时是),并采用user @ domain的形式。

当然,这些信息需要读取访问AD,这可能不适用于您的应用程序。