On Wed, 2013-08-28 at 11:41 +0200, Ralf Habacker wrote: > diff --git a/dlls/iphlpapi/iphlpapi.spec b/dlls/iphlpapi/iphlpapi.spec > index 36ba13f..cad2ca9 100644 > --- a/dlls/iphlpapi/iphlpapi.spec > +++ b/dlls/iphlpapi/iphlpapi.spec > @@ -6,6 +6,7 @@ > @ stdcall AllocateAndGetIpForwardTableFromStack( ptr long long long ) > @ stdcall AllocateAndGetIpNetTableFromStack( ptr long long long ) > @ stdcall AllocateAndGetTcpTableFromStack( ptr long long long ) > +@ stdcall AllocateAndGetTcpExTableFromStack( ptr long long long )
These should be sorted. > diff --git a/dlls/iphlpapi/ipstats.c b/dlls/iphlpapi/ipstats.c > index 809dbc6..bcb3021 100644 > --- a/dlls/iphlpapi/ipstats.c > +++ b/dlls/iphlpapi/ipstats.c > @@ -2327,6 +2327,32 @@ 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 > + * > + * RETURNS > + * ERROR_INVALID_PARAMETER if ppTcpTable is NULL, whatever GetTcpTable() > + * returns otherwise. > + */ > +DWORD WINAPI AllocateAndGetTcpExTableFromStack( PMIB_TCPTABLE_EX > *ppTcpTable, BOOL bOrder, > + HANDLE heap, DWORD flags ) > +{ > + TRACE("table %p, bOrder %d, heap %p, flags 0x%08x\n", ppTcpTable, > bOrder, heap, flags); > + > + if (!ppTcpTable) return ERROR_INVALID_PARAMETER; > + return build_tcp_table( TCP_TABLE_OWNER_PID_ALL, (void **)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/dlls/iphlpapi/ipstats.h b/dlls/iphlpapi/ipstats.h > index bf5bb92..823fadb 100644 > --- a/dlls/iphlpapi/ipstats.h > +++ b/dlls/iphlpapi/ipstats.h > @@ -34,6 +34,7 @@ DWORD getInterfaceStatsByName(const char *name, PMIB_IFROW > entry) DECLSPEC_HIDDE > > DWORD WINAPI AllocateAndGetUdpTableFromStack(PMIB_UDPTABLE *ppUdpTable, BOOL > bOrder, HANDLE heap, DWORD flags) DECLSPEC_HIDDEN; > DWORD WINAPI AllocateAndGetTcpTableFromStack(PMIB_TCPTABLE *ppTcpTable, BOOL > bOrder, HANDLE heap, DWORD flags) DECLSPEC_HIDDEN; > +DWORD WINAPI AllocateAndGetTcpExTableFromStack(PMIB_TCPTABLE_EX *ppTcpTable, > BOOL bOrder, HANDLE heap, DWORD flags) DECLSPEC_HIDDEN; > DWORD WINAPI AllocateAndGetIpNetTableFromStack(PMIB_IPNETTABLE > *ppIpNetTable, BOOL bOrder, HANDLE heap, DWORD flags) DECLSPEC_HIDDEN; > DWORD WINAPI AllocateAndGetIpForwardTableFromStack(PMIB_IPFORWARDTABLE > *ppIpForwardTable, BOOL bOrder, HANDLE heap, DWORD flags) DECLSPEC_HIDDEN; You don't need this, AllocateAndGetTcpExTableFromStack can be made static. The first parameter should be a void ** like in recent versions of iphlpapi.h. > diff --git a/include/tcpmib.h b/include/tcpmib.h > index 477500c..bc63c3f 100644 > --- a/include/tcpmib.h > +++ b/include/tcpmib.h > @@ -150,6 +150,9 @@ typedef struct _MIB_TCPTABLE2 > MIB_TCPROW2 table[1]; > } MIB_TCPTABLE2, *PMIB_TCPTABLE2; > > +typedef MIB_TCPROW_OWNER_PID _MIB_TCPROW_EX; > +typedef MIB_TCPTABLE_OWNER_PID MIB_TCPTABLE_EX; > +typedef PMIB_TCPTABLE_OWNER_PID PMIB_TCPTABLE_EX; Recent headers don't define these so we shouldn't either.