private static Sid[] GetCapabilities(Sid package_sid, INET_FIREWALL_AC_CAPABILITIES caps)
        {
            Sid package_cap = new Sid(SecurityAuthority.Package, 3).CreateRelative(package_sid.SubAuthorities.Skip(1).ToArray());

            if (caps.count == 0)
            {
                return(new Sid[0]);
            }

            return(NtProcess.Current.ReadMemoryArray <SidAndAttributes>(caps.capabilities.ToInt64(),
                                                                        caps.count).Select(s => new Sid(s.Sid)).Where(s => s != package_cap).ToArray());
        }
        private static List <SID_AND_ATTRIBUTES> getContainerSID(INET_FIREWALL_AC_CAPABILITIES cap)
        {
            List <SID_AND_ATTRIBUTES> mycap = new List <SID_AND_ATTRIBUTES>();

            IntPtr arrayValue = cap.capabilities;

            var structSize = Marshal.SizeOf(typeof(SID_AND_ATTRIBUTES));

            for (var i = 0; i < cap.count; i++)
            {
                var cur = (SID_AND_ATTRIBUTES)Marshal.PtrToStructure(arrayValue, typeof(SID_AND_ATTRIBUTES));
                mycap.Add(cur);
                arrayValue = new IntPtr((long)(arrayValue) + (long)(structSize));
            }

            return(mycap);
        }
Пример #3
0
        private static List<SID_AND_ATTRIBUTES> getContainerSID(INET_FIREWALL_AC_CAPABILITIES cap)
        {
            List<SID_AND_ATTRIBUTES> mycap = new List<SID_AND_ATTRIBUTES>();

            IntPtr arrayValue = cap.capabilities;

            var structSize = Marshal.SizeOf(typeof(SID_AND_ATTRIBUTES));
            for (var i = 0; i < cap.count; i++)
            {
                var cur = (SID_AND_ATTRIBUTES)Marshal.PtrToStructure(arrayValue, typeof(SID_AND_ATTRIBUTES));
                mycap.Add(cur);
                arrayValue = new IntPtr((long)(arrayValue) + (long)(structSize));
            }

            return mycap;

        }