[PATCH] iphlpapi: Implement AllocateAndGetTcpExTableFromStack
Marcus Meissner
meissner at suse.de
Thu Jul 12 05:50:32 CDT 2018
From: "Erich E. Hoover" <erich.e.hoover at gmail.com>
Based on a patch by Ralf Habacker.
https://bugs.winehq.org/show_bug.cgi?id=34372
Signed-off-by: Marcus Meissner <meissner at suse.de>
---
dlls/iphlpapi/iphlpapi.spec | 1 +
dlls/iphlpapi/ipstats.c | 36 ++++++++++++++++++++++++++++++++++++
include/iphlpapi.h | 1 +
3 files changed, 38 insertions(+)
diff --git a/dlls/iphlpapi/iphlpapi.spec b/dlls/iphlpapi/iphlpapi.spec
index 1686644de0..4769c3c673 100644
--- a/dlls/iphlpapi/iphlpapi.spec
+++ b/dlls/iphlpapi/iphlpapi.spec
@@ -5,6 +5,7 @@
@ stdcall AllocateAndGetIpAddrTableFromStack( ptr long long long )
@ stdcall AllocateAndGetIpForwardTableFromStack( ptr long long long )
@ stdcall AllocateAndGetIpNetTableFromStack( ptr long long long )
+@ stdcall AllocateAndGetTcpExTableFromStack( ptr long long long long )
@ stdcall AllocateAndGetTcpTableFromStack( ptr long long long )
@ stdcall AllocateAndGetUdpTableFromStack( ptr long long long )
@ stdcall CancelIPChangeNotify( ptr )
diff --git a/dlls/iphlpapi/ipstats.c b/dlls/iphlpapi/ipstats.c
index 8f6720ea52..8163df2e47 100644
--- a/dlls/iphlpapi/ipstats.c
+++ b/dlls/iphlpapi/ipstats.c
@@ -2323,6 +2323,42 @@ DWORD WINAPI AllocateAndGetTcpTableFromStack( PMIB_TCPTABLE *ppTcpTable, BOOL bO
return build_tcp_table( TCP_TABLE_BASIC_ALL, (void **)ppTcpTable, bOrder, heap, flags, NULL );
}
+/******************************************************************
+ * AllocateAndGetTcpExTableFromStack (IPHLPAPI.@)
+ *
+ * Get the TCP connection table.
+ * Like GetTcpTable(), but allocate the returned table from heap.
+ *
+ * PARAMS
+ * ppTcpTable [Out] pointer into which the MIB_TCPTABLE_EX is
+ * allocated and returned.
+ * bOrder [In] whether to sort the table
+ * heap [In] heap from which the table is allocated
+ * flags [In] flags to HeapAlloc
+ * family [In] address family [AF_INET|AF_INET6]
+ *
+ * RETURNS
+ * ERROR_INVALID_PARAMETER if ppTcpTable is NULL, whatever GetTcpTable()
+ * returns otherwise.
+ */
+DWORD WINAPI AllocateAndGetTcpExTableFromStack( VOID **ppTcpTable, BOOL bOrder,
+ HANDLE heap, DWORD flags, DWORD family )
+{
+ TRACE("table %p, bOrder %d, heap %p, flags 0x%08x, family %u\n",
+ ppTcpTable, bOrder, heap, flags, family);
+
+ if (!ppTcpTable) return ERROR_INVALID_PARAMETER;
+ if (!family) return ERROR_INVALID_PARAMETER;
+
+ if (family != WS_AF_INET)
+ {
+ FIXME( "family = %u not supported\n", family );
+ return ERROR_NOT_SUPPORTED;
+ }
+
+ return build_tcp_table( TCP_TABLE_OWNER_PID_ALL, ppTcpTable, bOrder, heap, flags, NULL );
+}
+
static DWORD get_udp_table_sizes( UDP_TABLE_CLASS class, DWORD row_count, DWORD *row_size )
{
DWORD table_size;
diff --git a/include/iphlpapi.h b/include/iphlpapi.h
index 54d93d1c9c..8ed6c784b1 100644
--- a/include/iphlpapi.h
+++ b/include/iphlpapi.h
@@ -156,6 +156,7 @@ ULONG WINAPI GetAdaptersAddresses(ULONG family, ULONG flags, PVOID reserved,
DWORD WINAPI AllocateAndGetUdpTableFromStack(PMIB_UDPTABLE *ppUdpTable, BOOL bOrder, HANDLE heap, DWORD flags);
DWORD WINAPI AllocateAndGetTcpTableFromStack(PMIB_TCPTABLE *ppTcpTable, BOOL bOrder, HANDLE heap, DWORD flags);
+DWORD WINAPI AllocateAndGetTcpExTableFromStack(VOID **ppTcpTable, BOOL bOrder, HANDLE heap, DWORD flags, DWORD family);
DWORD WINAPI AllocateAndGetIpNetTableFromStack(PMIB_IPNETTABLE *ppIpNetTable, BOOL bOrder, HANDLE heap, DWORD flags);
DWORD WINAPI AllocateAndGetIpForwardTableFromStack(PMIB_IPFORWARDTABLE *ppIpForwardTable, BOOL bOrder, HANDLE heap, DWORD flags);
--
2.18.0
More information about the wine-devel
mailing list