[PATCH] iphlpapi: Add AllocateAndGetTcpExTableFromStack().

Hans Leidekker hans at codeweavers.com
Wed Aug 28 05:08:32 CDT 2013


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.





More information about the wine-devel mailing list