internal static Owner GetOwningModuleTCP6(MIB_TCP6ROW_OWNER_MODULE row) { Owner ret = null; //if (ownerCache.TryGetValue(row, out ret)) //{ // return ret; //} IntPtr buffer = IntPtr.Zero; try { uint buffSize = 0; var retn = GetOwnerModuleFromTcp6Entry(ref row, TCPIP_OWNER_MODULE_INFO_CLASS.TCPIP_OWNER_MODULE_INFO_BASIC, IntPtr.Zero, ref buffSize); if ((retn != NO_ERROR) && (retn != ERROR_INSUFFICIENT_BUFFER)) { //Cannot get owning module for this connection LogHelper.Info("Unable to get the connection owner."); return(ret); } if (buffSize == 0) { //No buffer? Probably means we can't retrieve any information about this connection; skip it LogHelper.Info("Unable to get the connection owner."); return(ret); } buffer = Marshal.AllocHGlobal((int)buffSize); //GetOwnerModuleFromTcp6Entry needs the fields of TCPIP_OWNER_MODULE_INFO_BASIC to be NULL ZeroMemory(buffer, buffSize); var resp = GetOwnerModuleFromTcp6Entry(ref row, TCPIP_OWNER_MODULE_INFO_CLASS.TCPIP_OWNER_MODULE_INFO_BASIC, buffer, ref buffSize); if (resp == 0) { ret = new Owner((TCPIP_OWNER_MODULE_BASIC_INFO)Marshal.PtrToStructure(buffer, typeof(TCPIP_OWNER_MODULE_BASIC_INFO))); } else if (resp != ERROR_NOT_FOUND) // Ignore closed connections { LogHelper.Error("Unable to get the connection owner.", new Win32Exception((int)resp)); } //ownerCache.Add(row, ret); return(ret); } finally { if (buffer != IntPtr.Zero) { Marshal.FreeHGlobal(buffer); } } }
public static TCP_ESTATS_DATA_ROD_v0 GetTCPStatistics(MIB_TCP6ROW_OWNER_MODULE conn) { IntPtr rw = IntPtr.Zero; IntPtr rod = IntPtr.Zero; try { var row = new MIB_TCP6ROW() { _localAddress = conn._localAddress, _remoteAddress = conn._remoteAddress, _localPort = conn._localPort, _remotePort = conn._remotePort, State = conn._state, LocalScopeId = conn.LocalScopeId, RemoteScopeId = conn.RemoteScopeId }; var rwS = Marshal.SizeOf(typeof(TCP_ESTATS_DATA_RW_v0)); rw = Marshal.AllocHGlobal(rwS); var rodS = Marshal.SizeOf(typeof(TCP_ESTATS_DATA_ROD_v0)); rod = Marshal.AllocHGlobal(rodS); var resp = GetPerTcp6ConnectionEStats(ref row, TCP_ESTATS_TYPE.TcpConnectionEstatsData, rw, 0, (uint)rwS, IntPtr.Zero, 0, 0, rod, 0, (uint)rodS); if (resp != NO_ERROR) { LogHelper.Error("Unable to get the connection statistics.", new Win32Exception((int)resp)); } var parsedRW = (TCP_ESTATS_DATA_RW_v0)Marshal.PtrToStructure(rw, typeof(TCP_ESTATS_DATA_RW_v0)); var parsedROD = (TCP_ESTATS_DATA_ROD_v0)Marshal.PtrToStructure(rod, typeof(TCP_ESTATS_DATA_ROD_v0)); return(parsedROD); } finally { if (rw != IntPtr.Zero) { Marshal.FreeHGlobal(rw); } if (rod != IntPtr.Zero) { Marshal.FreeHGlobal(rod); } } }
public static extern uint GetOwnerModuleFromTcp6Entry(ref MIB_TCP6ROW_OWNER_MODULE pTcpEntry, TCPIP_OWNER_MODULE_INFO_CLASS Class, IntPtr Buffer, ref uint pdwSize);
public static extern ErrorCode GetOwnerModuleFromTcp6Entry(ref MIB_TCP6ROW_OWNER_MODULE pTcpEntry, TCPIP_OWNER_MODULE_INFO_CLASS @class, IntPtr buffer, ref int pdwSize);