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

CreateWellKnownSid() static private method

static private CreateWellKnownSid ( WellKnownSidType sidType, System.Security.Principal.SecurityIdentifier domainSid, byte &resultSid ) : int
sidType WellKnownSidType
domainSid System.Security.Principal.SecurityIdentifier
resultSid byte
return int
        internal static int CreateWellKnownSid(
            WellKnownSidType sidType,
            SecurityIdentifier domainSid,
            out byte[] 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)
            //

            uint length = (uint)SecurityIdentifier.MaxBinaryLength;
            resultSid = new byte[length];

            if (FALSE != Interop.Advapi32.CreateWellKnownSid((int)sidType, domainSid == null ? null : domainSid.BinaryForm, resultSid, ref length))
            {
                return Interop.Errors.ERROR_SUCCESS;
            }
            else
            {
                resultSid = null;

                return Marshal.GetLastWin32Error();
            }
        }

Usage Example

Beispiel #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::CreateWellKnownSid