System.Security.AccessControl.Win32.ConvertSdToSddl C# (CSharp) Method

ConvertSdToSddl() static private method

static private ConvertSdToSddl ( byte binaryForm, int requestedRevision, SecurityInfos si, string &resultSddl ) : int
binaryForm byte
requestedRevision int
si SecurityInfos
resultSddl string
return int
        internal static int ConvertSdToSddl(
            byte[] binaryForm,
            int requestedRevision,
            SecurityInfos si,
            out string resultSddl)
        {
            int errorCode;
            IntPtr ByteArray;
            uint ByteArraySize = 0;

            if (!Interop.Advapi32.ConvertSdToStringSd(binaryForm, (uint)requestedRevision, (uint)si, out ByteArray, ref ByteArraySize))
            {
                errorCode = Marshal.GetLastWin32Error();
                goto Error;
            }

            //
            // Extract data from the returned pointer
            //

            resultSddl = Marshal.PtrToStringUni(ByteArray);

            //
            // Now is a good time to get rid of the returned pointer
            //

            Interop.Kernel32.LocalFree(ByteArray);

            return 0;

        Error:

            resultSddl = null;

            if (errorCode == Interop.Errors.ERROR_NOT_ENOUGH_MEMORY)
            {
                throw new OutOfMemoryException();
            }

            return errorCode;
        }

Usage Example

Example #1
0
        public string GetSddlForm(AccessControlSections includeSections)
        {
            byte[] binaryForm = new byte[this.BinaryLength];
            this.GetBinaryForm(binaryForm, 0);
            SecurityInfos securityInfos = (SecurityInfos)0;

            if ((includeSections & AccessControlSections.Owner) != AccessControlSections.None)
            {
                securityInfos |= SecurityInfos.Owner;
            }
            if ((includeSections & AccessControlSections.Group) != AccessControlSections.None)
            {
                securityInfos |= SecurityInfos.Group;
            }
            if ((includeSections & AccessControlSections.Audit) != AccessControlSections.None)
            {
                securityInfos |= SecurityInfos.SystemAcl;
            }
            if ((includeSections & AccessControlSections.Access) != AccessControlSections.None)
            {
                securityInfos |= SecurityInfos.DiscretionaryAcl;
            }
            string result;
            int    num = Win32.ConvertSdToSddl(binaryForm, 1, securityInfos, out result);

            if (num == 87 || num == 1305)
            {
                throw new InvalidOperationException();
            }
            if (num != 0)
            {
                throw new InvalidOperationException();
            }
            return(result);
        }
All Usage Examples Of System.Security.AccessControl.Win32::ConvertSdToSddl