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); }
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); }
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); }