public string ConvertAccountNameToStringSid(string accountName, out bool isAccountLocal, out string domain) { string str = null; string str1 = null; string str2 = null; if (!ActiveDirectoryHelper.LookupAccountName(accountName, out str2, out domain)) { char[] chrArray = new char[1]; chrArray[0] = '\\'; if (accountName.IndexOf(chrArray[0]) == -1) { domain = Environment.MachineName; isAccountLocal = true; } else { string[] strArrays = accountName.Split(chrArray); if ((int)strArrays.Length == 2 && string.Compare(strArrays[0], Environment.MachineName, StringComparison.OrdinalIgnoreCase) == 0 && ActiveDirectoryHelper.LookupAccountName(strArrays[1], out str, out str1)) { str2 = str; if (str2.StartsWith(BUILTIN_DOMAIN_SID_PREFIX, StringComparison.OrdinalIgnoreCase)) { domain = Environment.MachineName; } } } } if (str2 != null) { isAccountLocal = string.Compare(domain, Environment.MachineName, StringComparison.OrdinalIgnoreCase) == 0; if (string.IsNullOrEmpty(str2)) { str2 = BUILTIN_DOMAIN_SID_PREFIX + "1"; } return(str2); } else { object[] objArray = new object[1]; objArray[0] = accountName; ArgumentException argumentException = new ArgumentException(string.Format(CultureInfo.CurrentCulture, Resources.AccountToSidConvertError, objArray)); argumentException.Data.Add("ErrorCode", 0x534); throw argumentException; } }
public string ConvertStringSidToAccountName(string sid, out string domain) { NativeMethods.SID_NAME_USE sIDNAMEUSE = 0; int lastWin32Error = 0; IntPtr intPtr = new IntPtr(0); byte[] numArray = null; try { if (NativeMethods.ConvertStringSidToSid(sid, out intPtr)) { int lengthSid = NativeMethods.GetLengthSid(intPtr); numArray = new byte[lengthSid]; Marshal.Copy(intPtr, numArray, 0, lengthSid); } else { lastWin32Error = Marshal.GetLastWin32Error(); object[] systemErrorMessage = new object[1]; systemErrorMessage[0] = ActiveDirectoryHelper.GetSystemErrorMessage(lastWin32Error); throw new ArgumentException(string.Format(CultureInfo.CurrentCulture, Resources.SidToAccountConvertError, systemErrorMessage)); } } finally { NativeMethods.LocalFree(intPtr); } StringBuilder stringBuilder = new StringBuilder(); int capacity = stringBuilder.Capacity; StringBuilder stringBuilder1 = new StringBuilder(); int num = stringBuilder1.Capacity; if (!NativeMethods.LookupAccountSid(null, numArray, stringBuilder, ref capacity, stringBuilder1, ref num, out sIDNAMEUSE)) { lastWin32Error = Marshal.GetLastWin32Error(); if (lastWin32Error == 122) { stringBuilder.EnsureCapacity(capacity); stringBuilder1.EnsureCapacity(num); lastWin32Error = 0; if (!NativeMethods.LookupAccountSid(null, numArray, stringBuilder, ref capacity, stringBuilder1, ref num, out sIDNAMEUSE)) { lastWin32Error = Marshal.GetLastWin32Error(); } } } if (lastWin32Error != 0) { object[] objArray = new object[1]; objArray[0] = ActiveDirectoryHelper.GetSystemErrorMessage(lastWin32Error); throw new ArgumentException(string.Format(CultureInfo.CurrentCulture, Resources.SidToAccountConvertError, objArray)); } else { if (!sid.StartsWith(BUILTIN_DOMAIN_SID_PREFIX, StringComparison.OrdinalIgnoreCase)) { domain = stringBuilder1.ToString(); } else { domain = Environment.MachineName; } return(stringBuilder.ToString()); } }