NTAccount.Translate

时间:2019-02-27 14:06:48

标签: windows security .net-core

我在asp.net网站上有此问题,但对于Windows计算机上的.Net Core应该是通用的。

如果我尝试翻译不存在的域,我会得到一个异常,这是可以的,但是,接下来所有具有正确域名的后续调用都会引发一个异常“ System.ObjectDisposedException:安全句柄已关闭”。

我要问一些解决方法,因为名称转换在重新启动应用程序之前是行不通的。


此行为可以用

重现
  • Microsoft.NETCore.App 2.2.0
  • System.Security.Principal.Windows 4.5.1

class Program
{
    static string Translate(string gName)
    {
        try
        {
            var nt = new NTAccount(gName);
            if (nt.IsValidTargetType(typeof(SecurityIdentifier)))
            {
                var si = (SecurityIdentifier)(nt).Translate(typeof(SecurityIdentifier));
                return si.ToString();
            }
        }
        catch (Exception ex)
        { 
            Console.Write(ex.ToString()+"\n\n");                
        }
        return "";
    }
    static void Main(string[] args)
    {
        var si= new SecurityIdentifier(WellKnownSidType.BuiltinAdministratorsSid, null);
        var na = si.Translate(typeof(NTAccount));
        var knownName = na.ToString();
        foreach (var aName in new[] {  knownName,
                                       @"DOMAIN_NOT_ESISTS\Benutzer",
                                       knownName  })
        {
            Console.WriteLine(aName);
            Console.WriteLine(Translate(aName));
        }
        Console.ReadKey();
    }
}

0 个答案:

没有答案