TDI_STATUS InfoTdiQueryGetConnectionTcpTable(PADDRESS_FILE AddrFile,
PNDIS_BUFFER Buffer,
PUINT BufferSize,
- BOOLEAN Extended)
+ TDI_TCPUDP_CLASS_INFO Class)
{
SIZE_T Size;
- MIB_TCPROW_OWNER_PID TcpRow;
- TDI_STATUS Status = TDI_SUCCESS;
+ MIB_TCPROW_OWNER_MODULE TcpRow;
+ TDI_STATUS Status = TDI_INVALID_REQUEST;
TI_DbgPrint(DEBUG_INFO, ("Called.\n"));
- TcpRow.dwOwningPid = (DWORD)AddrFile->ProcessId;
- if (Extended)
+ if (Class == TcpUdpClassOwnerPid)
{
Size = sizeof(MIB_TCPROW_OWNER_PID);
}
+ else if (Class == TcpUdpClassOwner)
+ {
+ Size = sizeof(MIB_TCPROW_OWNER_MODULE);
+ }
else
{
Size = sizeof(MIB_TCPROW);
}
+ TcpRow.dwOwningPid = (DWORD)AddrFile->ProcessId;
+ TcpRow.liCreateTimestamp = AddrFile->CreationTime;
+
if (AddrFile->Listener != NULL)
{
PADDRESS_FILE EndPoint;
TcpRow.dwLocalPort = AddrFile->Port;
TcpRow.dwRemoteAddr = EndPoint->Address.Address.IPv4Address;
TcpRow.dwRemotePort = EndPoint->Port;
+
+ Status = TDI_SUCCESS;
}
else if (AddrFile->Connection != NULL &&
AddrFile->Connection->SocketContext != NULL)
}
}
}
- else
- {
- TcpRow.dwState = 0;
- TcpRow.dwRemoteAddr = 0;
- TcpRow.dwRemotePort = 0;
- }
if (NT_SUCCESS(Status))
{
+ if (Class == TcpUdpClassOwner)
+ {
+ RtlZeroMemory(&TcpRow.OwningModuleInfo[0], sizeof(TcpRow.OwningModuleInfo));
+ TcpRow.OwningModuleInfo[0] = (ULONG_PTR)AddrFile->SubProcessTag;
+ }
+
Status = InfoCopyOut( (PCHAR)&TcpRow, Size,
Buffer, BufferSize );
}
TDI_STATUS InfoTdiQueryGetConnectionUdpTable(PADDRESS_FILE AddrFile,
PNDIS_BUFFER Buffer,
PUINT BufferSize,
- BOOLEAN Extended)
+ TDI_TCPUDP_CLASS_INFO Class)
{
- MIB_UDPROW_OWNER_PID UdpRow;
+ SIZE_T Size;
+ MIB_UDPROW_OWNER_MODULE UdpRow;
TDI_STATUS Status = TDI_INVALID_REQUEST;
TI_DbgPrint(DEBUG_INFO, ("Called.\n"));
+ if (Class == TcpUdpClassOwnerPid)
+ {
+ Size = sizeof(MIB_UDPROW_OWNER_PID);
+ }
+ else if (Class == TcpUdpClassOwner)
+ {
+ Size = sizeof(MIB_UDPROW_OWNER_MODULE);
+ }
+ else
+ {
+ Size = sizeof(MIB_UDPROW);
+ }
+
UdpRow.dwLocalAddr = AddrFile->Address.Address.IPv4Address;
UdpRow.dwLocalPort = AddrFile->Port;
UdpRow.dwOwningPid = (DWORD)AddrFile->ProcessId;
+ UdpRow.liCreateTimestamp = AddrFile->CreationTime;
+ UdpRow.dwFlags = 0; /* FIXME */
+ if (Class == TcpUdpClassOwner)
+ {
+ RtlZeroMemory(&UdpRow.OwningModuleInfo[0], sizeof(UdpRow.OwningModuleInfo));
+ UdpRow.OwningModuleInfo[0] = (ULONG_PTR)AddrFile->SubProcessTag;
+ }
Status = InfoCopyOut( (PCHAR)&UdpRow,
- (Extended ? sizeof(MIB_UDPROW_OWNER_PID) : sizeof(MIB_UDPROW)),
- Buffer, BufferSize );
+ Size, Buffer, BufferSize );
TI_DbgPrint(DEBUG_INFO, ("Returning %08x\n", Status));
IP_ADDRESS Address, Netmask, Router;
PIPROUTE_ENTRY Route = Buffer;
+ if (!Buffer || BufferSize < sizeof(IPROUTE_ENTRY))
+ return TDI_INVALID_PARAMETER;
+
AddrInitIPv4( &Address, Route->Dest );
AddrInitIPv4( &Netmask, Route->Mask );
AddrInitIPv4( &Router, Route->Gw );
- if (!Buffer || BufferSize < sizeof(IPROUTE_ENTRY))
- return TDI_INVALID_PARAMETER;
-
if (IF == Loopback)
{
DbgPrint("Failing attempt to add route to loopback adapter\n");