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);
        }
Exemplo n.º 2
0
        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);
            }
        }