Esempio n. 1
0
        /// <summary>
        /// Return a list of Windows 8 app containers.
        /// </summary>
        private List <InetFirewallAppContainer> PINetworkIsolationEnumAppContainers()
        {
            IntPtr arrayValue = IntPtr.Zero;
            uint   size       = 0;
            List <InetFirewallAppContainer> list = new List <InetFirewallAppContainer>();

            GCHandle handlePdwCntPublicACs = GCHandle.Alloc(size, GCHandleType.Pinned);
            GCHandle handlePpACs           = GCHandle.Alloc(arrayValue, GCHandleType.Pinned);

            uint retVal = NetworkIsolationEnumAppContainers((Int32)NETISO_FLAG.NETISO_FLAG_MAX, out size, out arrayValue);

            ACs = arrayValue;

            int structSize = Marshal.SizeOf(typeof(InetFirewallAppContainer));

            for (var i = 0; i < size; i++)
            {
                InetFirewallAppContainer cur = (InetFirewallAppContainer)Marshal.PtrToStructure(arrayValue, typeof(InetFirewallAppContainer));
                list.Add(cur);
                arrayValue = new IntPtr((long)(arrayValue) + (long)(structSize));
            }

            handlePdwCntPublicACs.Free();
            handlePpACs.Free();

            return(list);
        }
Esempio n. 2
0
        private InetFirewallAppContainer[] GetContainers()
        {
            uint errorCode = NetworkIsolationEnumAppContainers((int)NetisoFlag.NetisoFlagMax, out uint count, out IntPtr ppPublicAppCs);

            if (errorCode != 0)
            {
                throw new ExternalException("Enum App containers failed", (int)errorCode);
            }

            InetFirewallAppContainer[] containers = new InetFirewallAppContainer[count];
            int structSize = Marshal.SizeOf(typeof(InetFirewallAppContainer));

            for (var i = 0; i < count; i++)
            {
                containers[i] = (InetFirewallAppContainer)Marshal.PtrToStructure(ppPublicAppCs + i * structSize, typeof(InetFirewallAppContainer));
            }

            NetworkIsolationFreeAppContainers(ppPublicAppCs);

            return(containers);
        }