System.Security.Principal.Win32.GetWindowsAccountDomainSid C# (CSharp) Method

GetWindowsAccountDomainSid() static private method

static private GetWindowsAccountDomainSid ( System.Security.Principal.SecurityIdentifier sid, System.Security.Principal.SecurityIdentifier &resultSid ) : int
sid System.Security.Principal.SecurityIdentifier
resultSid System.Security.Principal.SecurityIdentifier
return int
        internal static int GetWindowsAccountDomainSid(
            SecurityIdentifier sid,
            out SecurityIdentifier resultSid
            )
        {
            //
            // Passing an array as big as it can ever be is a small price to pay for
            // not having to P/Invoke twice (once to get the buffer, once to get the data)
            //

            byte[] BinaryForm = new Byte[sid.BinaryLength];
            sid.GetBinaryForm(BinaryForm, 0);
            uint sidLength = (uint)SecurityIdentifier.MaxBinaryLength;
            byte[] resultSidBinary = new byte[sidLength];

            if (FALSE != Interop.Advapi32.GetWindowsAccountDomainSid(BinaryForm, resultSidBinary, ref sidLength))
            {
                resultSid = new SecurityIdentifier(resultSidBinary, 0);

                return Interop.Errors.ERROR_SUCCESS;
            }
            else
            {
                resultSid = null;

                return Marshal.GetLastWin32Error();
            }
        }

Usage Example

Example #1
0
        public SecurityIdentifier(WellKnownSidType sidType, SecurityIdentifier domainSid)
        {
            if (sidType == WellKnownSidType.LogonIdsSid)
            {
                throw new ArgumentException(Environment.GetResourceString("IdentityReference_CannotCreateLogonIdsSid"), "sidType");
            }
            if (!Win32.WellKnownSidApisSupported)
            {
                throw new PlatformNotSupportedException(Environment.GetResourceString("PlatformNotSupported_RequiresW2kSP3"));
            }
            if (sidType < WellKnownSidType.NullSid || sidType > WellKnownSidType.WinBuiltinTerminalServerLicenseServersSid)
            {
                throw new ArgumentException(Environment.GetResourceString("Argument_InvalidValue"), "sidType");
            }
            if (sidType >= WellKnownSidType.AccountAdministratorSid && sidType <= WellKnownSidType.AccountRasAndIasServersSid)
            {
                if (domainSid == null)
                {
                    throw new ArgumentNullException("domainSid", Environment.GetResourceString("IdentityReference_DomainSidRequired", new object[]
                    {
                        sidType
                    }));
                }
                SecurityIdentifier left;
                int windowsAccountDomainSid = Win32.GetWindowsAccountDomainSid(domainSid, out left);
                if (windowsAccountDomainSid == 122)
                {
                    throw new OutOfMemoryException();
                }
                if (windowsAccountDomainSid == 1257)
                {
                    throw new ArgumentException(Environment.GetResourceString("IdentityReference_NotAWindowsDomain"), "domainSid");
                }
                if (windowsAccountDomainSid != 0)
                {
                    throw new SystemException(Win32Native.GetMessage(windowsAccountDomainSid));
                }
                if (left != domainSid)
                {
                    throw new ArgumentException(Environment.GetResourceString("IdentityReference_NotAWindowsDomain"), "domainSid");
                }
            }
            byte[] binaryForm;
            int    num = Win32.CreateWellKnownSid(sidType, domainSid, out binaryForm);

            if (num == 87)
            {
                throw new ArgumentException(Win32Native.GetMessage(num), "sidType/domainSid");
            }
            if (num != 0)
            {
                throw new SystemException(Win32Native.GetMessage(num));
            }
            this.CreateFromBinaryForm(binaryForm, 0);
        }
All Usage Examples Of System.Security.Principal.Win32::GetWindowsAccountDomainSid