From 91b013d3877d9f3a08c21ce3cdec1950a34220f9 Mon Sep 17 00:00:00 2001 From: Pierre Schweitzer Date: Fri, 23 Nov 2018 22:49:53 +0100 Subject: [PATCH] [TCPIP] When enumerating sockets, retrieve their state and return it This fixes netstat not having any state when enumerating connections. Basically, now, our netstat produces stuff like: https://twitter.com/HeisSpiter/status/1065871999266955264 --- drivers/network/tcpip/include/tcp.h | 2 ++ drivers/network/tcpip/tcpip/ninfo.c | 5 ++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/drivers/network/tcpip/include/tcp.h b/drivers/network/tcpip/include/tcp.h index 20147c77d79..6bb8280d5a1 100644 --- a/drivers/network/tcpip/include/tcp.h +++ b/drivers/network/tcpip/include/tcp.h @@ -216,3 +216,5 @@ VOID CompleteBucket(PCONNECTION_ENDPOINT Connection, PTDI_BUCKET Bucket, const B void LibTCPDumpPcb(PVOID SocketContext); + +NTSTATUS TCPGetSocketStatus(PCONNECTION_ENDPOINT Connection, PULONG State); diff --git a/drivers/network/tcpip/tcpip/ninfo.c b/drivers/network/tcpip/tcpip/ninfo.c index 42894767eae..d45b4bb1e5d 100644 --- a/drivers/network/tcpip/tcpip/ninfo.c +++ b/drivers/network/tcpip/tcpip/ninfo.c @@ -188,7 +188,6 @@ TDI_STATUS InfoTdiQueryGetConnectionTcpTable(PADDRESS_FILE AddrFile, TI_DbgPrint(DEBUG_INFO, ("Called.\n")); - TcpRow.State = 0; /* FIXME */ TcpRow.dwLocalAddr = AddrFile->Address.Address.IPv4Address; TcpRow.dwLocalPort = AddrFile->Port; @@ -215,9 +214,13 @@ TDI_STATUS InfoTdiQueryGetConnectionTcpTable(PADDRESS_FILE AddrFile, TcpRow.dwRemoteAddr = EndPoint.Address[0].Address[0].in_addr; TcpRow.dwRemotePort = ntohs(EndPoint.Address[0].Address[0].sin_port); } + + Status = TCPGetSocketStatus(AddrFile->Connection, (PULONG)&TcpRow.State); + ASSERT(NT_SUCCESS(Status)); } else { + TcpRow.State = 0; TcpRow.dwRemoteAddr = 0; TcpRow.dwRemotePort = 0; }