SORU
31 Ocak 2009, CUMARTESİ


Nasıl C bir hesap için SID adı dönüştürme#

Ben C# Bir dizin tarar ve bazı bilgileri toplayan bir uygulama. Her dosya için hesap adını göstermek istiyorum. GB nesnenin SID almak, ve sonra yaparak yerel sistemde bunu yapabilirim:

string GetNameFromSID( SecurityIdentifier sid )
{
    NTAccount ntAccount = (NTAccount)sid.Translate( typeof( NTAccount ) );
    return ntAccount.ToString();
}

Ancak, bu muhtemelen Translate çünkü bir ağ üzerindeki dosyaları için çalışmaz() işlevi yalnızca yerel kullanıcı hesapları ile çalışır. Belki de SİD bir LDAP arama yapabilirim, takip etmeye çalıştım ben de öyle düşünmüştüm:

string GetNameFromSID( SecurityIdentifier sid )
{
    string str = "LDAP://<SID="   sid.Value   ">";
    DirectoryEntry dirEntry = new DirectoryEntry( str );
    return dirEntry.Name;
}

Bu "dirEntry.erişim o, bu iş olacak gibi görünüyor Adı gidiyor gibi" bir kaç saniye kilitleniyor, ve ağ sorgulama, ama sonra bir Sistem atar.Çalışma zamanı.Interopservices.COMException

Kimse keyfi olarak bir dosya veya SID hesap adı nasıl alabilirim biliyor mu? Ağ veya LDAP ya da bir şey hakkında çok şey bilmiyorum. Bir sınıf olarak adlandırılan DirectorySearcher belki yaşayacağım kullanın, ama istediği bir etki alanı adı, ve ben bilmem nasıl olduğunu ya da elimde olan dizin yolunu ben tarama.

Şimdiden teşekkürler.

CEVAP
11 Mart 2009, ÇARŞAMBA


Burada iyi bir cevap için bkz

http://stackoverflow.com/questions/380031/the-best-way-to-resolve-display-username-by-sid

Olayın özü bu bit

string sid="S-1-5-21-789336058-507921405-854245398-9938";
string account = new System.Security.Principal.SecurityIdentifier(sid).Translate(typeof(System.Security.Principal.NTAccount)).ToString();

Bu yaklaşım, yerel olmayan SİD'İN üzerinde active directory için benim için çalışıyor.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Cole Rolland

    Cole Rolland

    23 Kasım 2008
  • kruno j

    kruno j

    6 Mayıs 2007
  • YAN TV

    YAN TV

    20 EKİM 2011