コード例 #1
0
        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);
            }
        }
コード例 #2
0
        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);
        }
コード例 #3
0
 internal static extern uint SetPerTcpConnectionEStats(ref MIB_TCPROW Row, TCP_ESTATS_TYPE EstatsType, IntPtr Rw, uint RwVersion, uint RwSize, uint Offset);
コード例 #4
0
 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);
コード例 #5
0
ファイル: SocketMonitor.cs プロジェクト: filmackay/live
 private static extern Error SetPerTcpConnectionEStats(ref MIB_TCPROW rowPtr, TCP_ESTATS_TYPE EstatsType, IntPtr Rw, uint RwVersion, int RwSize, uint Offset);
コード例 #6
0
ファイル: SocketMonitor.cs プロジェクト: filmackay/live
 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);
コード例 #7
0
 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);
コード例 #8
0
 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);
コード例 #9
0
        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);
        }
コード例 #10
0
 static extern uint SetPerTcpConnectionEStats(IntPtr row, TCP_ESTATS_TYPE statsType,
                                              IntPtr rw, uint rwVersion, uint rwSize, uint offset);
コード例 #11
0
 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);