如何获取来宾/管理员的本地组名?

题:

我使用http://support.microsoft.com/kb/306273上的代码

添加Windows用户。 问题是我需要将用户添加到组中,但组名已本地化。

例如,MS-example使用英文计算机,这意味着您可以像这样获取访客组:grp = AD.Children.Find(“Guests”,“group”)

但是在非英语计算机上,“访客”组名是本地化的,例如在我的德语操作系统上,来宾的组名是“Gäste”。

这意味着支持示例在我的计算机上运行我需要将该行更改为grp = AD.Children.Find(“Gäste”,“group”)

然后它工作。

现在,如果操作系统是任何其他语言,我如何找到访客用户的名称? 或者如何从sid获取来宾用户名?

注意:.NET 2.0,而不是3.0或3.5

正如您所指出的,组的名称根据系统语言进行了本地化。

对于“众所周知”的群组,例如“管理员”和“访客”,您应该根据SID进行检索。 客人的SID是:

S-1-5-32-546 

这里有一个众所周知的SID列表:

http://support.microsoft.com/kb/243330

可以在此处找到从SID获取组名的代码

您可以使用此代码,返回的值对于非英语系统是正确的:

 var guestsGroup = new SecurityIdentifier(WellKnownSidType.BuiltinGuestsSid, null).Translate(typeof(NTAccount)).Value; 

通过SID查找帐户是最好的方法。 它有点做作,但它的工作方式是这样的:

  • 管理员帐户的SID 始终S-1-5-21 ,以-500结尾。 中间的其他所有内容都是随机的(域名的SID)。

  • Guest帐户的SID 始终S-1-5-21 ,以-501

可以在此处获得描述此内容的Microsoft知识库文章。

要查找这些帐户,您必须枚举本地计算机上的所有帐户,并查找哪些SID以这些数字开头并以这些数字结尾。 一旦匹配,您就拥有了内置帐户。 不是最好的方法,但它的工作原理。

安全设置\本地策略\安全选项下的组策略设置称为帐户:重命名管理员帐户帐户:重命名访客帐户 。 我无法在注册表中找到存储这些设置的位置,但如果您能够找到并查找它们,您很可能会获得这两个帐户的“官方”名称。

此页面包含一些用于获取用户详细信息并进行检查的代码。

这段代码:

 public IdentityReferenceCollection GetUserGroups() { System.Security.Principal.WindowsIdentity currentUser = System.Security.Principal.WindowsIdentity.GetCurrent(); return currentUser.Groups; } 

返回当前用户的组。

可以在此处找到有关WindowsIdentity类的更多详细信息,其中包含Groups属性。

您应该能够使用WindowsIdentity和WindowsPrincipal类:

 Dim currentIdentity as WindowsIdentity = WindowsIdentity.GetCurrent() Dim currentPrincipal as WindowsPrincipal = New WindowsPrincipal(currentIdentity) If currentPrincipal.IsInRole(WindowsBuiltInRole.Guest) Then Foobar() End If 

没关系,我发现你实际上是在尝试将用户添加到该组中。