예제 #1
0
        /// <summary>
        /// The get ex tcp connections v 2.
        /// </summary>
        /// <returns>
        /// The <see>
        ///         <cref>List</cref>
        ///     </see>
        ///     .
        /// </returns>
        private static List <ConnectionInfo> GetExTcpConnectionsV2()
        {
            List <ConnectionInfo> list   = new List <ConnectionInfo>();
            const int             AfInet = 2; // IP_v4
            int  buffSize = 48000;
            bool firstRun = true;

exec:
            byte[] buffer = new byte[buffSize];
            Result res    =
                (Result)
                GetExtendedTcpTable(buffer, out buffSize, true, AfInet, TcpTableClass.TcpTableOwnerPidConnections, 0);

            if (res != Result.NoError)
            {
                if (!firstRun)
                {
                    return(list);
                }

                firstRun = false;
                goto exec;
            }

            int numEntries = Convert.ToInt32(buffer[0]);
            int nOffset    = 4;

            for (int i = 0; i < numEntries; i++)
            {
                while (Convert.ToInt32(buffer[nOffset]) <= 0)
                {
                    nOffset++;
                }
                nOffset += 4;
                list.Add(
                    new WindowsConnection(
                        (States)Convert.ToInt32(buffer[nOffset - 4]),
                        CommonFunctions.Bytes2IpEndPoint(buffer, ref nOffset, false),
                        CommonFunctions.Bytes2IpEndPoint(buffer, ref nOffset, true),
                        CommonFunctions.Bytes2Int(buffer, ref nOffset)));
            }

            return(list);
        }