internal static unsafe MappedPortSafeHandle MapPortsSafe(out List <MappedPort> ports) { MappedPortSafeHandle portsHandle = new MappedPortSafeHandle(); ports = new List <MappedPort>(); if (MapPorts(out IntPtr handle, out MappedPort * items, out uint count)) { for (int i = 0; i < count; i++) { ports.Add(*(items + i)); } portsHandle.SetHandle(handle); return(portsHandle); } portsHandle.SetHandleAsInvalid(); return(portsHandle); }
internal static Dictionary <uint, Process> MapPorts() { using (MappedPortSafeHandle handle = MappedPortSafeHandle.MapPortsSafe(out List <MappedPort> ports)) { Dictionary <uint, Process> map = new Dictionary <uint, Process>(); if (handle.IsInvalid) { return(map); } foreach (MappedPort mappedPort in ports) { (uint port, Process proc) = MappedPortToProcess(mappedPort); if (port > 0 && !map.ContainsKey(port)) { map.Add(port, proc); } } return(map); } }