public static MIB_TCPROW_OWNER_PID[] GetAllTcpConnections() { // TcpRow is my own class to display returned rows in a nice manner. // TcpRow[] tTable; MIB_TCPROW_OWNER_PID[] tTable; int AF_INET = 2; // IP_v4 int buffSize = 0; // how much memory do we need? uint ret = GetExtendedTcpTable(IntPtr.Zero, ref buffSize, true, AF_INET, TCP_TABLE_CLASS.TCP_TABLE_OWNER_PID_ALL, 0); IntPtr buffTable = Marshal.AllocHGlobal(buffSize); try { ret = GetExtendedTcpTable(buffTable, ref buffSize, true, AF_INET, TCP_TABLE_CLASS.TCP_TABLE_OWNER_PID_ALL, 0); if (ret != 0) { return(null); } // get the number of entries in the table //MibTcpTable tab = (MibTcpTable)Marshal.PtrToStructure(buffTable, typeof(MibTcpTable)); var tab = (MIB_TCPTABLE_OWNER_PID)Marshal.PtrToStructure(buffTable, typeof(MIB_TCPTABLE_OWNER_PID)); //IntPtr rowPtr = (IntPtr)((long)buffTable + Marshal.SizeOf(tab.numberOfEntries) ); var rowPtr = (IntPtr)((long)buffTable + Marshal.SizeOf(tab.dwNumEntries)); // buffer we will be returning //tTable = new TcpRow[tab.numberOfEntries]; tTable = new MIB_TCPROW_OWNER_PID[tab.dwNumEntries]; //for (int i = 0; i < tab.numberOfEntries; i++) for (int i = 0; i < tab.dwNumEntries; i++) { //MibTcpRow_Owner_Pid tcpRow = (MibTcpRow_Owner_Pid)Marshal.PtrToStructure(rowPtr, typeof(MibTcpRow_Owner_Pid)); var tcpRow = (MIB_TCPROW_OWNER_PID)Marshal.PtrToStructure(rowPtr, typeof(MIB_TCPROW_OWNER_PID)); //tTable[i] = new TcpRow(tcpRow); tTable[i] = tcpRow; rowPtr = (IntPtr)((long)rowPtr + Marshal.SizeOf(tcpRow)); // next entry } } finally { // Free the Memory Marshal.FreeHGlobal(buffTable); } return(tTable); }
public static MIB_TCPROW_OWNER_PID[] GetAllTcpConnections() { // TcpRow is my own class to display returned rows in a nice manner. // TcpRow[] tTable; MIB_TCPROW_OWNER_PID[] tTable; int AF_INET = 2; // IP_v4 int buffSize = 0; // how much memory do we need? uint ret = GetExtendedTcpTable(IntPtr.Zero, ref buffSize, true, AF_INET, TCP_TABLE_CLASS.TCP_TABLE_OWNER_PID_ALL, 0); IntPtr buffTable = Marshal.AllocHGlobal(buffSize); try { ret = GetExtendedTcpTable(buffTable, ref buffSize, true, AF_INET, TCP_TABLE_CLASS.TCP_TABLE_OWNER_PID_ALL, 0); if (ret != 0) { return null; } // get the number of entries in the table //MibTcpTable tab = (MibTcpTable)Marshal.PtrToStructure(buffTable, typeof(MibTcpTable)); var tab = (MIB_TCPTABLE_OWNER_PID) Marshal.PtrToStructure(buffTable, typeof (MIB_TCPTABLE_OWNER_PID)); //IntPtr rowPtr = (IntPtr)((long)buffTable + Marshal.SizeOf(tab.numberOfEntries) ); var rowPtr = (IntPtr) ((long) buffTable + Marshal.SizeOf(tab.dwNumEntries)); // buffer we will be returning //tTable = new TcpRow[tab.numberOfEntries]; tTable = new MIB_TCPROW_OWNER_PID[tab.dwNumEntries]; //for (int i = 0; i < tab.numberOfEntries; i++) for (int i = 0; i < tab.dwNumEntries; i++) { //MibTcpRow_Owner_Pid tcpRow = (MibTcpRow_Owner_Pid)Marshal.PtrToStructure(rowPtr, typeof(MibTcpRow_Owner_Pid)); var tcpRow = (MIB_TCPROW_OWNER_PID) Marshal.PtrToStructure(rowPtr, typeof (MIB_TCPROW_OWNER_PID)); //tTable[i] = new TcpRow(tcpRow); tTable[i] = tcpRow; rowPtr = (IntPtr) ((long) rowPtr + Marshal.SizeOf(tcpRow)); // next entry } } finally { // Free the Memory Marshal.FreeHGlobal(buffTable); } return tTable; }