コード例 #1
0
        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;
            }
        }
コード例 #2
0
        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());
            }
        }