GetSidSubAuthorityCount() private method

private GetSidSubAuthorityCount ( IntPtr sidPointer ) : IntPtr
sidPointer IntPtr
return IntPtr
Example #1
0
        internal static string SidToString(IntPtr sidPointer)
        {
            if (!NativeMethods.IsValidSid(sidPointer))
            {
                throw new RemotingException(CoreChannel.GetResourceString("Remoting_InvalidSid"));
            }

            StringBuilder sidString = new StringBuilder();
            IntPtr        sidIdentifierAuthorityPointer = NativeMethods.GetSidIdentifierAuthority(sidPointer);
            int           lastError = Marshal.GetLastWin32Error();

            if (lastError != 0)
            {
                throw new Win32Exception(lastError);
            }
            byte[] sidIdentifierAuthority = new byte[6];
            Marshal.Copy(sidIdentifierAuthorityPointer, sidIdentifierAuthority, 0, 6);

            IntPtr subAuthorityCountPointer = NativeMethods.GetSidSubAuthorityCount(sidPointer);

            lastError = Marshal.GetLastWin32Error();
            if (lastError != 0)
            {
                throw new Win32Exception(lastError);
            }
            uint subAuthorityCount = (uint)Marshal.ReadByte(subAuthorityCountPointer);

            if (sidIdentifierAuthority[0] != 0 && sidIdentifierAuthority[1] != 0)
            {
                sidString.Append(String.Format(CultureInfo.CurrentCulture, "{0:x2}{1:x2}{2:x2}{3:x2}{4:x2}{5:x2}",
                                               sidIdentifierAuthority[0],
                                               sidIdentifierAuthority[1],
                                               sidIdentifierAuthority[2],
                                               sidIdentifierAuthority[3],
                                               sidIdentifierAuthority[4],
                                               sidIdentifierAuthority[5]));
            }

            else
            {
                uint number = (uint)sidIdentifierAuthority[5] +
                              (uint)(sidIdentifierAuthority[4] << 8) +
                              (uint)(sidIdentifierAuthority[3] << 16) +
                              (uint)(sidIdentifierAuthority[2] << 24);

                sidString.Append(String.Format(CultureInfo.CurrentCulture, "{0:x12}", number));
            }

            for (int index = 0; index < subAuthorityCount; ++index)
            {
                IntPtr subAuthorityPointer = NativeMethods.GetSidSubAuthority(sidPointer, index);
                lastError = Marshal.GetLastWin32Error();
                if (lastError != 0)
                {
                    throw new Win32Exception(lastError);
                }

                uint number = (uint)Marshal.ReadInt32(subAuthorityPointer);
                sidString.Append(String.Format(CultureInfo.CurrentCulture, "-{0:x12}", number));
            }

            return(sidString.ToString());
        }