Exemplo n.º 1
0
        public static SafeSecurityDescriptor GetPrivateObjectSecurity(this PSECURITY_DESCRIPTOR pSD, SECURITY_INFORMATION si)
        {
            var pResSD = SafeSecurityDescriptor.Null;

            AdvApi32.GetPrivateObjectSecurity(pSD, si, pResSD, 0, out var ret);
            if (ret > 0)
            {
                pResSD = new SafeSecurityDescriptor((int)ret);
                if (!pResSD.IsInvalid && !AdvApi32.GetPrivateObjectSecurity(pSD, si, pResSD, ret, out ret))
                {
                    Win32Error.GetLastError().ThrowIfFailed();
                }
            }
            return(pResSD);
        }
Exemplo n.º 2
0
        public static IntPtr GetPrivateObjectSecurity(IntPtr pSD, SECURITY_INFORMATION si)
        {
            var pResSD = IntPtr.Zero;

            AdvApi32.GetPrivateObjectSecurity(pSD, si, IntPtr.Zero, 0, out uint ret);
            if (ret > 0)
            {
                pResSD = Marshal.AllocHGlobal((int)ret);
                if (pResSD != IntPtr.Zero && !AdvApi32.GetPrivateObjectSecurity(pSD, si, pResSD, ret, out ret))
                {
                    Marshal.FreeHGlobal(pResSD);
                    pResSD = IntPtr.Zero;
                    Win32Error.GetLastError().ThrowIfFailed();
                }
            }
            return(pResSD);
        }
Exemplo n.º 3
0
        public static IntPtr GetPrivateObjectSecurity(IntPtr pSD, SECURITY_INFORMATION si)
        {
            var  pResSD = IntPtr.Zero;
            uint ret    = 0;

            AdvApi32.GetPrivateObjectSecurity(pSD, si, IntPtr.Zero, 0, ref ret);
            if (ret > 0)
            {
                pResSD = Marshal.AllocHGlobal((int)ret);
                if (pResSD != IntPtr.Zero && !AdvApi32.GetPrivateObjectSecurity(pSD, si, pResSD, ret, ref ret))
                {
                    var hres = Marshal.GetLastWin32Error();
                    Marshal.FreeHGlobal(pResSD);
                    pResSD = IntPtr.Zero;
                    Marshal.ThrowExceptionForHR(hres);
                }
            }
            return(pResSD);
        }