private static SafeAllocatedMemoryHandle GetRwForType(TCP_ESTATS_TYPE type, bool enable) { switch (type) { case TCP_ESTATS_TYPE.TcpConnectionEstatsData: return(SafeHGlobalHandle.CreateFromStructure(new TCP_ESTATS_DATA_RW_v0 { EnableCollection = enable })); case TCP_ESTATS_TYPE.TcpConnectionEstatsSndCong: return(SafeHGlobalHandle.CreateFromStructure(new TCP_ESTATS_SND_CONG_RW_v0 { EnableCollection = enable })); case TCP_ESTATS_TYPE.TcpConnectionEstatsPath: return(SafeHGlobalHandle.CreateFromStructure(new TCP_ESTATS_PATH_RW_v0 { EnableCollection = enable })); case TCP_ESTATS_TYPE.TcpConnectionEstatsSendBuff: return(SafeHGlobalHandle.CreateFromStructure(new TCP_ESTATS_SEND_BUFF_RW_v0 { EnableCollection = enable })); case TCP_ESTATS_TYPE.TcpConnectionEstatsRec: return(SafeHGlobalHandle.CreateFromStructure(new TCP_ESTATS_REC_RW_v0 { EnableCollection = enable })); case TCP_ESTATS_TYPE.TcpConnectionEstatsObsRec: return(SafeHGlobalHandle.CreateFromStructure(new TCP_ESTATS_OBS_REC_RW_v0 { EnableCollection = enable })); case TCP_ESTATS_TYPE.TcpConnectionEstatsBandwidth: var operation = enable ? TCP_BOOLEAN_OPTIONAL.TcpBoolOptEnabled : TCP_BOOLEAN_OPTIONAL.TcpBoolOptDisabled; return(SafeHGlobalHandle.CreateFromStructure(new TCP_ESTATS_BANDWIDTH_RW_v0 { EnableCollectionInbound = operation, EnableCollectionOutbound = operation })); case TCP_ESTATS_TYPE.TcpConnectionEstatsFineRtt: return(SafeHGlobalHandle.CreateFromStructure(new TCP_ESTATS_FINE_RTT_RW_v0 { EnableCollection = enable })); default: return(null); } }
public static bool SetPerTcpConnectionEStats <TRW>(MIB_TCPROW_OWNER_PID row, TCP_ESTATS_TYPE statsType, ref TRW rw, string fieldName) { var offset = (uint)Marshal.OffsetOf(typeof(TRW), fieldName); var buffRow = IntPtr.Zero; var buffRW = IntPtr.Zero; try { buffRow = Marshal.AllocHGlobal(Marshal.SizeOf(row)); Marshal.StructureToPtr(row, buffRow, false); buffRW = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(TRW))); Marshal.StructureToPtr(rw, buffRW, false); var result = SetPerTcpConnectionEStats(buffRow, statsType, buffRW, 0, (uint)Marshal.SizeOf(typeof(TRW)), offset); if (result != 0) { return(false); } } finally { // Free the Memory if (buffRow != IntPtr.Zero) { Marshal.FreeHGlobal(buffRow); } if (buffRW != IntPtr.Zero) { Marshal.FreeHGlobal(buffRW); } } return(true); }
internal static extern uint SetPerTcpConnectionEStats(ref MIB_TCPROW Row, TCP_ESTATS_TYPE EstatsType, IntPtr Rw, uint RwVersion, uint RwSize, uint Offset);
internal static extern uint GetPerTcpConnectionEStats(ref MIB_TCPROW Row, TCP_ESTATS_TYPE EstatsType, IntPtr Rw, uint RwVersion, uint RwSize, IntPtr Ros, uint RosVersion, uint RosSize, IntPtr Rod, uint RodVersion, uint RodSize);
private static extern Error SetPerTcpConnectionEStats(ref MIB_TCPROW rowPtr, TCP_ESTATS_TYPE EstatsType, IntPtr Rw, uint RwVersion, int RwSize, uint Offset);
private static extern Error GetPerTcpConnectionEStats(ref MIB_TCPROW rowPtr, TCP_ESTATS_TYPE EstatsType, IntPtr rw, uint RwVersion, int RwSize, IntPtr ros, uint RosVersion, int RosSize, IntPtr rod, uint RodVersion, int RodSize);
public static extern uint SetPerTcpConnectionEStats([NativeTypeName("PMIB_TCPROW")] MIB_TCPROW_LH *Row, TCP_ESTATS_TYPE EstatsType, [NativeTypeName("PUCHAR")] byte *Rw, [NativeTypeName("ULONG")] uint RwVersion, [NativeTypeName("ULONG")] uint RwSize, [NativeTypeName("ULONG")] uint Offset);
public static extern uint GetPerTcp6ConnectionEStats([NativeTypeName("PMIB_TCP6ROW")] MIB_TCP6ROW *Row, TCP_ESTATS_TYPE EstatsType, [NativeTypeName("PUCHAR")] byte *Rw, [NativeTypeName("ULONG")] uint RwVersion, [NativeTypeName("ULONG")] uint RwSize, [NativeTypeName("PUCHAR")] byte *Ros, [NativeTypeName("ULONG")] uint RosVersion, [NativeTypeName("ULONG")] uint RosSize, [NativeTypeName("PUCHAR")] byte *Rod, [NativeTypeName("ULONG")] uint RodVersion, [NativeTypeName("ULONG")] uint RodSize);
public static bool GetPerTcpConnectionEStats <TRW, TROD>(MIB_TCPROW_OWNER_PID row, TCP_ESTATS_TYPE statsType, ref TRW rw, ref TROD rod) { var buffRow = IntPtr.Zero; var buffRW = IntPtr.Zero; var buffROD = IntPtr.Zero; try { buffRow = Marshal.AllocHGlobal(Marshal.SizeOf(row)); Marshal.StructureToPtr(row, buffRow, false); buffRW = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(TRW))); buffROD = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(TROD))); var result = GetPerTcpConnectionEStats(buffRow, statsType, buffRW, 0, (uint)Marshal.SizeOf(typeof(TRW)), IntPtr.Zero, 0, 0, buffROD, 0, (uint)Marshal.SizeOf(typeof(TROD))); if (result != 0) { return(false); } rw = (TRW)Marshal.PtrToStructure(buffRW, typeof(TRW)); rod = (TROD)Marshal.PtrToStructure(buffROD, typeof(TROD)); } finally { // Free the Memory if (buffRow != IntPtr.Zero) { Marshal.FreeHGlobal(buffRow); } if (buffRW != IntPtr.Zero) { Marshal.FreeHGlobal(buffRW); } if (buffROD != IntPtr.Zero) { Marshal.FreeHGlobal(buffROD); } } return(true); }
static extern uint SetPerTcpConnectionEStats(IntPtr row, TCP_ESTATS_TYPE statsType, IntPtr rw, uint rwVersion, uint rwSize, uint offset);
static extern uint GetPerTcpConnectionEStats(IntPtr row, TCP_ESTATS_TYPE statsType, IntPtr rw, uint rwVersion, uint rwSize, IntPtr ros, uint rosVersion, uint rosSize, IntPtr rod, uint rodVersion, uint rodSize);