2010-07-09 82 views
16

問:如何獲取客人/管理員的本地組名稱?

我用在 http://support.microsoft.com/kb/306273

發現代碼中添加的Windows用戶。 問題是我需要將用戶添加到組,但組名已本地化。

E.g. MS示例使用英語電腦,這意味着您可以獲得像這樣的訪客組: grp = AD.Children.Find(「Guests」,「group」)

但是,在非英語的計算機上, '訪客'組名是本地化的,例如在我的德語操作系統上,客人的組名是「Gäste」。

這意味着用於支持例如在我的計算機上運行,​​我需要到該行更改爲 GRP = AD.Children.Find(「Gäste」,「集團」)

然後它工作。

現在,如果操作系統是任何其他語言,如何找到訪客用戶的名稱? 或者我如何從sid獲取訪客用戶名?

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

回答

13

正如您已經指出的,組的名稱是根據系統語言本地化的。

對於'管理員'和'客人'等'知名'組織,您應該根據SID進行檢索。對於客人的SID是:

S-1-5-32-546 

還有就是衆所周知的SID列表,在這裏:

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

代碼從SID獲得組名稱可以發現here

3

仰望通過SID帳戶是最好的一段路要走。這是一個有點做作,但它的工作方式是這樣的:

  • 管理員帳戶的SID 總是開始與S-1-5-21-500結束。其他所有內容都是隨機的(域的SID)。

  • 遊客帳戶的SID 總是開始與S-1-5-21-501結束。

描述此問題的Microsoft知識庫文章here可用。

要找到這些帳戶,您必須枚舉本地計算機上的所有帳戶,並查找哪些SID以這些數字開頭。一旦他們匹配,你就擁有了內置的賬戶。不是最好的方式來做到這一點,但它的工作原理。

還有下安全設置的組策略設置\本地策略\稱爲帳戶安全選項:重命名系統管理員帳戶帳戶:重命名來賓帳戶。我無法找到註冊表中存儲這些設置的位置,但是如果能夠找出並查找它們,則很可能能夠獲得這兩個帳戶的「官方」名稱。

1

This page有一些用於獲取用戶詳細信息並檢查它們的代碼。

此代碼:

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

返回當前用戶的組。

有關WindowsIdentity類的更多詳細信息,請參閱here,其中Groups屬性here

0

您應該能夠使用的WindowsIdentity和WindowsPrincipal類:

Dim currentIdentity as WindowsIdentity = WindowsIdentity.GetCurrent() 
Dim currentPrincipal as WindowsPrincipal = New WindowsPrincipal(currentIdentity) 

If currentPrincipal.IsInRole(WindowsBuiltInRole.Guest) Then 
    Foobar() 
End If 

沒關係,我看到你實際上是試圖將用戶添加到組。

8

您可以使用此代碼,返回的值是正確的非英語系統:

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