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