从SID获取user @ domain而不是domain\user

Kev*_*son 2 .net c# active-directory

这有点模糊不清:我需要获取用户/组的用户@域形式,但我不想要域\用户表单.我遇到一个问题,一个长的Windows 2003+名称,其中两个是不同的,因为域\用户长度限制,因为新表单没有限制.

我在C#下,虽然我可以做以下事情:

string GetUserName(SecurityIdentifier SID)
{
    NTAccount account = SID.Translate(typeof(NTAccount));
    string [] splits = string.Split("\\", account.Value);
    return splits[1] + @"@" + splits[0];
}
Run Code Online (Sandbox Code Playgroud)

这并不总是正确的,正如我在我的介绍中所说,用户名@ domain与用户名的旧Windows NT形式不一样.如果您不相信我,请进入2k3 +盒子上的AD用户和计算机,看看旧NT用户名与新用户名的区别.

那么我如何保证从SID获得正确的用户名@ domain?除此之外,我还需要这种类型的东西为本地用户/组工作.

Bri*_*ond 5

用于获取此功能的Windows API称为DsCrackNames- http://msdn.microsoft.com/en-us/library/ms675970.它将根据您提供的标志以任意数量的格式提供输出.

  • 您可以使用interop look [here](http://pinvoke.net/search.aspx?search=DsCrackNames&namespace=ntdsapi)调用它. (2认同)