Исключение «System.ObjectDisposedException: безопасный дескриптор был закрыт» после неудачной попытки NTAccount.Translate - PullRequest
0 голосов
/ 27 февраля 2019

У меня есть эта проблема на веб-сайте asp.net, но она должна быть общей для .Net Core на компьютере с Windows.

Если я попытаюсь перевести несуществующий домен, я получу исключение, все нормально, но затем все последующие вызовы с правильным именем домена выдают исключение «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();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...