通过SID获取本地用户

时间:2011-02-28 09:57:49

标签: c# .net vb.net permissions directoryservices

问题:我想通过SID 获得本地Windows用户

我找到了这段代码

[ADSI]("WinNT://$Env:Computername/<SID=S-1-5-18>")

这里: http://www.eggheadcafe.com/software/aspnet/32882679/add-builtin-account-to-local-group-using-winnt-adsi-provider.aspx

我从中推断出,我可以在(VB).NET中使用它来实现:

Dim strURL As String = "WinNT://" + strComputerName + "/<SID=" + strSID + ">"
Dim de As DirectoryServices.DirectoryEntry = New DirectoryServices.DirectoryEntry(strURL)
de.Properties("whatever").Value.ToString()

然而,这不起作用。 任何人都知道如何做到这一点 WITHOUT 循环所有用户(首先需要从byte []转换为字符串,然后比较[不区分大小写]很多字符串,这使得它变慢)。

2 个答案:

答案 0 :(得分:3)

如果您使用的是.NET 3.5或更高版本,则可以使用此代码(在向项目添加对新System.DirectoryServices.AccountManagement命名空间的引用之后):

using System.DirectoryServices.AccountManagement;

// create a machine-context (local machine)
PrincipalContext ctx = new PrincipalContext(ContextType.Machine);

UserPrincipal up = UserPrincipal.FindByIdentity(ctx, IdentityType.Sid, <YourSidHere>);

if (up != null)
{
    Console.WriteLine("You've found: {0}", up.DisplayName);
}
else
{
    Console.WriteLine("ERROR: no one found");
}

答案 1 :(得分:0)

Win32具有LookupAccountSid函数,它正是这样做的。

有关如何使用VB.NET,请参阅PInvoke。在您的情况下,域名将是本地计算机名称。