[TCPIP] Stubplement returning module information for TCP and UDP connections
authorPierre Schweitzer <pierre@reactos.org>
Tue, 27 Nov 2018 21:27:45 +0000 (22:27 +0100)
committerPierre Schweitzer <pierre@reactos.org>
Tue, 27 Nov 2018 22:12:56 +0000 (23:12 +0100)
drivers/network/tcpip/tcpip/info.c
drivers/network/tcpip/tcpip/ninfo.c

index 674fb96..6cc44d5 100644 (file)
@@ -308,6 +308,23 @@ TDI_STATUS InfoTdiQueryInformationEx(
                  else
                      return TDI_INVALID_PARAMETER;
 
+              case IP_SPECIFIC_MODULE_ENTRY_ID:
+                 if (ID->toi_type != INFO_TYPE_PROVIDER)
+                     return TDI_INVALID_PARAMETER;
+
+                 if (ID->toi_entity.tei_entity == CO_TL_ENTITY)
+                     if ((EntityListContext = GetContext(ID->toi_entity)))
+                         return InfoTdiQueryGetConnectionTcpTable(EntityListContext, Buffer, BufferSize, TcpUdpClassOwner);
+                     else
+                         return TDI_INVALID_PARAMETER;
+                 else if (ID->toi_entity.tei_entity == CL_TL_ENTITY)
+                     if ((EntityListContext = GetContext(ID->toi_entity)))
+                         return InfoTdiQueryGetConnectionUdpTable(EntityListContext, Buffer, BufferSize, TcpUdpClassOwner);
+                     else
+                         return TDI_INVALID_PARAMETER;
+                 else
+                     return TDI_INVALID_PARAMETER;
+
 #if 0
               case IP_INTFC_INFO_ID:
                  if (ID->toi_type != INFO_TYPE_PROVIDER)
index 267c43f..3df5204 100644 (file)
@@ -185,22 +185,27 @@ TDI_STATUS InfoTdiQueryGetConnectionTcpTable(PADDRESS_FILE AddrFile,
                     TDI_TCPUDP_CLASS_INFO Class)
 {
     SIZE_T Size;
-    MIB_TCPROW_OWNER_PID TcpRow;
+    MIB_TCPROW_OWNER_MODULE TcpRow;
     TDI_STATUS Status = TDI_INVALID_REQUEST;
 
     TI_DbgPrint(DEBUG_INFO, ("Called.\n"));
 
-    TcpRow.dwOwningPid = (DWORD)AddrFile->ProcessId;
     if (Class == TcpUdpClassOwnerPid)
     {
         Size = sizeof(MIB_TCPROW_OWNER_PID);
     }
+    else if (Class == TcpUdpClassOwner)
+    {
+        Size = sizeof(MIB_TCPROW_OWNER_MODULE);
+    }
     else
     {
-        ASSERT(Class != TcpUdpClassOwner);
         Size = sizeof(MIB_TCPROW);
     }
 
+    TcpRow.dwOwningPid = (DWORD)AddrFile->ProcessId;
+    TcpRow.liCreateTimestamp = AddrFile->CreationTime; /* FIXME: to check */
+
     if (AddrFile->Listener != NULL)
     {
         PADDRESS_FILE EndPoint;
@@ -244,6 +249,12 @@ TDI_STATUS InfoTdiQueryGetConnectionTcpTable(PADDRESS_FILE AddrFile,
 
     if (NT_SUCCESS(Status))
     {
+        if (Class == TcpUdpClassOwner)
+        {
+            /* FIXME */
+            RtlZeroMemory(&TcpRow.OwningModuleInfo[0], sizeof(TcpRow.OwningModuleInfo));
+        }
+
         Status = InfoCopyOut( (PCHAR)&TcpRow, Size,
                               Buffer, BufferSize );
     }
@@ -259,7 +270,7 @@ TDI_STATUS InfoTdiQueryGetConnectionUdpTable(PADDRESS_FILE AddrFile,
                                    TDI_TCPUDP_CLASS_INFO Class)
 {
     SIZE_T Size;
-    MIB_UDPROW_OWNER_PID UdpRow;
+    MIB_UDPROW_OWNER_MODULE UdpRow;
     TDI_STATUS Status = TDI_INVALID_REQUEST;
 
     TI_DbgPrint(DEBUG_INFO, ("Called.\n"));
@@ -268,15 +279,25 @@ TDI_STATUS InfoTdiQueryGetConnectionUdpTable(PADDRESS_FILE AddrFile,
     {
         Size = sizeof(MIB_UDPROW_OWNER_PID);
     }
+    else if (Class == TcpUdpClassOwner)
+    {
+        Size = sizeof(MIB_UDPROW_OWNER_MODULE);
+    }
     else
     {
-        ASSERT(Class != TcpUdpClassOwner);
         Size = sizeof(MIB_UDPROW);
     }
 
     UdpRow.dwLocalAddr = AddrFile->Address.Address.IPv4Address;
     UdpRow.dwLocalPort = AddrFile->Port;
     UdpRow.dwOwningPid = (DWORD)AddrFile->ProcessId;
+    UdpRow.liCreateTimestamp = AddrFile->CreationTime;  /* FIXME: to check */
+    UdpRow.dwFlags = 0; /* FIXME */
+    if (Class == TcpUdpClassOwner)
+    {
+        /* FIXME */
+        RtlZeroMemory(&UdpRow.OwningModuleInfo[0], sizeof(UdpRow.OwningModuleInfo));
+    }
 
     Status = InfoCopyOut( (PCHAR)&UdpRow,
                          Size, Buffer, BufferSize );