2012-07-20 12 views
17

मैं एसआईडी सिस्टम को नियंत्रित करना चाहता हूं। बाइट [] टाइप स्ट्रिंग में।एसआईडी से स्ट्रिंग में कनवर्ट करने के लिए .net

मेरे कोड:

string path = "LDAP://DC=abc,DC=contoso,DC=com"; 
DirectoryEntry entry = new DirectoryEntry(path); 
DirectorySearcher mySearcher = new DirectorySearcher(entry); 

mySearcher.Filter = "(&(objectClass=user)(samaccountname=user1))"; 
results = mySearcher.FindAll(); 
foreach (SearchResult searchResult in results) 
{ 
    Console.WriteLine(searchResult.Properties["ObjectSID"][0].ToString()); 
} 

मैं इस के साथ करने की कोशिश की लेकिन यह डोमेन मैं वर्तमान में लॉग इन कर रहा हूँ से मान हो जाता है, और मैं किसी दिए गए डोमेन से की जरूरत है।

System.Security.Principal.NTAccount(user1) 
    .Translate([System.Security.Principal.SecurityIdentifier]).value 

उत्तर

34

SecurityIdentifier कक्षा पर एक नज़र डालें। इसके बाद आप की तरह सरल कर सकते हैं,

var sidInBytes = (byte[]) *somestuff* 
var sid = new SecurityIdentifier(sidInBytes, 0); 
// This gives you what you want 
sid.ToString(); 
1

इस Ive क्या किया है, कुछ पढ़ने यह अक्टूबर में मान संग्रहीत सुरक्षित लग रहा था के बाद। यदि आप नहीं जानते कि कौन से सर्वर दूसरी तरफ हैं। नीचे कोड से पता चलता है कि यह कैसे करना है अपने वांछित परिणाम प्राप्त करने के

private static string ExtractSinglePropertyValueFromByteArray(object value) 
{ 
    //all if checks etc has been omitted 
    string propertyValue = string.Empty; 
    var bytes = (byte[])value; 
    var propertyValueOct = BuildOctString(bytes); // 010500....etc 
    var propertyValueSec = BuildSecString(bytes); // S-1-5-...etc 
    propertyValue = propertyValueSec; 
    return propertyValue; 
} 

private static string BuildSecString(byte[] bytes) 
{ 
    return new SecurityIdentifier(bytes,0).Value.ToString(); 
} 

private static string BuildOctString(byte[] bytes) 
{ 
    StringBuilder sb = new StringBuilder(); 
    for (int i = 0; i < bytes.Length; i++) 
    { 
     sb.Append(bytes[i].ToString("X2")); 
    } 
    return sb.ToString(); 
} 
0

लोड directoryEntry में संपत्ति के बाद ....

var usrId = (byte[])directoryEntry.Properties["objectSid"][0]; 
var objectID = (new SecurityIdentifier(usrId,0)).ToString(); 
संबंधित मुद्दे