// Licensed under the Apache License, Version 2.0 // or the MIT license // , at your option. // All files in the project carrying such notice may not be copied, modified, or distributed // except according to those terms. // #include use shared::basetsd::DWORD64; use shared::in6addr::IN6_ADDR; use shared::minwindef::DWORD; use shared::ntdef::{LARGE_INTEGER, UCHAR, ULONGLONG}; const ANY_SIZE: usize = 1; pub const TCPIP_OWNING_MODULE_SIZE: usize = 16; ENUM!{enum MIB_TCP_STATE { MIB_TCP_STATE_CLOSED = 1, MIB_TCP_STATE_LISTEN = 2, MIB_TCP_STATE_SYN_SENT = 3, MIB_TCP_STATE_SYN_RCVD = 4, MIB_TCP_STATE_ESTAB = 5, MIB_TCP_STATE_FIN_WAIT1 = 6, MIB_TCP_STATE_FIN_WAIT2 = 7, MIB_TCP_STATE_CLOSE_WAIT = 8, MIB_TCP_STATE_CLOSING = 9, MIB_TCP_STATE_LAST_ACK = 10, MIB_TCP_STATE_TIME_WAIT = 11, MIB_TCP_STATE_DELETE_TCB = 12, MIB_TCP_STATE_RESERVED = 100, }} ENUM!{enum TCP_CONNECTION_OFFLOAD_STATE { TcpConnectionOffloadStateInHost = 0, TcpConnectionOffloadStateOffloading = 1, TcpConnectionOffloadStateOffloaded = 2, TcpConnectionOffloadStateUploading = 3, TcpConnectionOffloadStateMax = 4, }} pub type PTCP_CONNECTION_OFFLOAD_STATE = *mut TCP_CONNECTION_OFFLOAD_STATE; STRUCT!{struct MIB_TCPROW_LH { State: MIB_TCP_STATE, dwLocalAddr: DWORD, dwLocalPort: DWORD, dwRemoteAddr: DWORD, dwRemotePort: DWORD, }} pub type PMIB_TCPROW_LH = *mut MIB_TCPROW_LH; STRUCT!{struct MIB_TCPROW_W2K { dwState: DWORD, dwLocalAddr: DWORD, dwLocalPort: DWORD, dwRemoteAddr: DWORD, dwRemotePort: DWORD, }} pub type PMIB_TCPROW_W2K = *mut MIB_TCPROW_W2K; pub type MIB_TCPROW = MIB_TCPROW_LH; pub type PMIB_TCPROW = *mut MIB_TCPROW; STRUCT!{struct MIB_TCPTABLE { dwNumEntries: DWORD, table: [MIB_TCPROW; ANY_SIZE], }} pub type PMIB_TCPTABLE = *mut MIB_TCPTABLE; // FIXME: SIZEOF_TCPTABLE(x) STRUCT!{struct MIB_TCPROW2 { dwState: DWORD, dwLocalAddr: DWORD, dwLocalPort: DWORD, dwRemoteAddr: DWORD, dwRemotePort: DWORD, dwOwningPid: DWORD, dwOffloadState: TCP_CONNECTION_OFFLOAD_STATE, }} pub type PMIB_TCPROW2 = *mut MIB_TCPROW2; STRUCT!{struct MIB_TCPTABLE2 { dwNumEntries: DWORD, table: [MIB_TCPROW2; ANY_SIZE], }} pub type PMIB_TCPTABLE2 = *mut MIB_TCPTABLE2; // FIXME: SIZEOF_TCPTABLE2(x) STRUCT!{struct MIB_TCPROW_OWNER_PID { dwState: DWORD, dwLocalAddr: DWORD, dwLocalPort: DWORD, dwRemoteAddr: DWORD, dwRemotePort: DWORD, dwOwningPid: DWORD, }} pub type PMIB_TCPROW_OWNER_PID = *mut MIB_TCPROW_OWNER_PID; STRUCT!{struct MIB_TCPTABLE_OWNER_PID { dwNumEntries: DWORD, table: [MIB_TCPROW_OWNER_PID; ANY_SIZE], }} pub type PMIB_TCPTABLE_OWNER_PID = *mut MIB_TCPTABLE_OWNER_PID; // FIXME: SIZEOF_TCPTABLE_OWNER_PID(x) STRUCT!{struct MIB_TCPROW_OWNER_MODULE { dwState: DWORD, dwLocalAddr: DWORD, dwLocalPort: DWORD, dwRemoteAddr: DWORD, dwRemotePort: DWORD, dwOwningPid: DWORD, liCreateTimestamp: LARGE_INTEGER, OwningModuleInfo: [ULONGLONG; TCPIP_OWNING_MODULE_SIZE], }} pub type PMIB_TCPROW_OWNER_MODULE = *mut MIB_TCPROW_OWNER_MODULE; STRUCT!{struct MIB_TCPTABLE_OWNER_MODULE { dwNumEntries: DWORD, table: [MIB_TCPROW_OWNER_MODULE; ANY_SIZE], }} pub type PMIB_TCPTABLE_OWNER_MODULE = *mut MIB_TCPTABLE_OWNER_MODULE; // FIXME: SIZEOF_TCPTABLE_OWNER_MODULE(x) STRUCT!{struct MIB_TCP6ROW { State: MIB_TCP_STATE, LocalAddr: IN6_ADDR, dwLocalScopeId: DWORD, dwLocalPort: DWORD, RemoteAddr: IN6_ADDR, dwRemoteScopeId: DWORD, dwRemotePort: DWORD, }} pub type PMIB_TCP6ROW = *mut MIB_TCP6ROW; STRUCT!{struct MIB_TCP6TABLE { dwNumEntries: DWORD, table: [MIB_TCP6ROW; ANY_SIZE], }} pub type PMIB_TCP6TABLE = *mut MIB_TCP6TABLE; // FIXME: SIZEOF_TCP6TABLE(x) STRUCT!{struct MIB_TCP6ROW2 { LocalAddr: IN6_ADDR, dwLocalScopeId: DWORD, dwLocalPort: DWORD, RemoteAddr: IN6_ADDR, dwRemoteScopeId: DWORD, dwRemotePort: DWORD, State: MIB_TCP_STATE, dwOwningPid: DWORD, dwOffloadState: TCP_CONNECTION_OFFLOAD_STATE, }} pub type PMIB_TCP6ROW2 = *mut MIB_TCP6ROW2; STRUCT!{struct MIB_TCP6TABLE2 { dwNumEntries: DWORD, table: [MIB_TCP6ROW2; ANY_SIZE], }} pub type PMIB_TCP6TABLE2 = *mut MIB_TCP6TABLE2; // FIXME: SIZEOF_TCP6TABLE2(x) STRUCT!{struct MIB_TCP6ROW_OWNER_PID { ucLocalAddr: [UCHAR; 16], dwLocalScopeId: DWORD, dwLocalPort: DWORD, ucRemoteAddr: [UCHAR; 16], dwRemoteScopeId: DWORD, dwRemotePort: DWORD, dwState: DWORD, dwOwningPid: DWORD, }} pub type PMIB_TCP6ROW_OWNER_PID = *mut MIB_TCP6ROW_OWNER_PID; STRUCT!{struct MIB_TCP6TABLE_OWNER_PID { dwNumEntries: DWORD, table: [MIB_TCP6ROW_OWNER_PID; ANY_SIZE], }} pub type PMIB_TCP6TABLE_OWNER_PID = *mut MIB_TCP6TABLE_OWNER_PID; // FIXME: SIZEOF_TCP6TABLE_OWNER_PID(x) STRUCT!{struct MIB_TCP6ROW_OWNER_MODULE { ucLocalAddr: [UCHAR; 16], dwLocalScopeId: DWORD, dwLocalPort: DWORD, ucRemoteAddr: [UCHAR; 16], dwRemoteScopeId: DWORD, dwRemotePort: DWORD, dwState: DWORD, dwOwningPid: DWORD, liCreateTimestamp: LARGE_INTEGER, OwningModuleInfo: [ULONGLONG; TCPIP_OWNING_MODULE_SIZE], }} pub type PMIB_TCP6ROW_OWNER_MODULE = *mut MIB_TCP6ROW_OWNER_MODULE; STRUCT!{struct MIB_TCP6TABLE_OWNER_MODULE { dwNumEntries: DWORD, table: [MIB_TCP6ROW_OWNER_MODULE; ANY_SIZE], }} pub type PMIB_TCP6TABLE_OWNER_MODULE = *mut MIB_TCP6TABLE_OWNER_MODULE; // FIXME: SIZEOF_TCP6TABLE_OWNER_MODULE(x) ENUM!{enum TCP_RTO_ALGORITHM { TcpRtoAlgorithmOther = 1, TcpRtoAlgorithmConstant = 2, TcpRtoAlgorithmRsre = 3, TcpRtoAlgorithmVanj = 4, MIB_TCP_RTO_OTHER = 1, MIB_TCP_RTO_CONSTANT = 2, MIB_TCP_RTO_RSRE = 3, MIB_TCP_RTO_VANJ = 4, }} pub type PTCP_RTO_ALGORITHM = *mut TCP_RTO_ALGORITHM; STRUCT!{struct MIB_TCPSTATS_LH { RtoAlgorithm: TCP_RTO_ALGORITHM, dwRtoMin: DWORD, dwRtoMax: DWORD, dwMaxConn: DWORD, dwActiveOpens: DWORD, dwPassiveOpens: DWORD, dwAttemptFails: DWORD, dwEstabResets: DWORD, dwCurrEstab: DWORD, dwInSegs: DWORD, dwOutSegs: DWORD, dwRetransSegs: DWORD, dwInErrs: DWORD, dwOutRsts: DWORD, dwNumConns: DWORD, }} pub type PMIB_TCPSTATS_LH = *mut MIB_TCPSTATS_LH; STRUCT!{struct MIB_TCPSTATS_W2K { dwRtoAlgorithm: DWORD, dwRtoMin: DWORD, dwRtoMax: DWORD, dwMaxConn: DWORD, dwActiveOpens: DWORD, dwPassiveOpens: DWORD, dwAttemptFails: DWORD, dwEstabResets: DWORD, dwCurrEstab: DWORD, dwInSegs: DWORD, dwOutSegs: DWORD, dwRetransSegs: DWORD, dwInErrs: DWORD, dwOutRsts: DWORD, dwNumConns: DWORD, }} pub type PMIB_TCPSTATS_W2K = *mut MIB_TCPSTATS_W2K; pub type MIB_TCPSTATS = MIB_TCPSTATS_LH; pub type PMIB_TCPSTATS = *mut MIB_TCPSTATS; STRUCT!{struct MIB_TCPSTATS2 { RtoAlgorithm: TCP_RTO_ALGORITHM, dwRtoMin: DWORD, dwRtoMax: DWORD, dwMaxConn: DWORD, dwActiveOpens: DWORD, dwPassiveOpens: DWORD, dwAttemptFails: DWORD, dwEstabResets: DWORD, dwCurrEstab: DWORD, dw64InSegs: DWORD64, dw64OutSegs: DWORD64, dwRetransSegs: DWORD, dwInErrs: DWORD, dwOutRsts: DWORD, dwNumConns: DWORD, }} pub type PMIB_TCPSTATS2 = *mut MIB_TCPSTATS2;