[PATCH 3/6] iphlpapi: Implement GetAdapterIndex() by parsing the GUID from the name.

Huw Davies huw at codeweavers.com
Thu Aug 19 02:53:43 CDT 2021


Signed-off-by: Huw Davies <huw at codeweavers.com>
---
 dlls/iphlpapi/iphlpapi_main.c | 35 +++++++++++------------------------
 1 file changed, 11 insertions(+), 24 deletions(-)

diff --git a/dlls/iphlpapi/iphlpapi_main.c b/dlls/iphlpapi/iphlpapi_main.c
index ab72f766e97..ff6b858d48b 100644
--- a/dlls/iphlpapi/iphlpapi_main.c
+++ b/dlls/iphlpapi/iphlpapi_main.c
@@ -69,7 +69,6 @@ WINE_DEFAULT_DEBUG_CHANNEL(iphlpapi);
 
 static const WCHAR device_tcpip[] = {'\\','D','E','V','I','C','E','\\','T','C','P','I','P','_',0};
 
-DWORD WINAPI AllocateAndGetIfTableFromStack( MIB_IFTABLE **table, BOOL sort, HANDLE heap, DWORD flags );
 DWORD WINAPI AllocateAndGetIpAddrTableFromStack( MIB_IPADDRTABLE **table, BOOL sort, HANDLE heap, DWORD flags );
 
 static const NPI_MODULEID *ip_module_id( USHORT family )
@@ -533,10 +532,10 @@ DWORD WINAPI FlushIpNetTable(DWORD dwIfIndex)
  *  ptr     [In] pointer to the buffer to free
  *
  */
-void WINAPI FreeMibTable(void *ptr)
+void WINAPI FreeMibTable( void *ptr )
 {
-  TRACE("(%p)\n", ptr);
-  HeapFree(GetProcessHeap(), 0, ptr);
+    TRACE( "(%p)\n", ptr );
+    heap_free( ptr );
 }
 
 /******************************************************************
@@ -547,33 +546,21 @@ void WINAPI FreeMibTable(void *ptr)
  * PARAMS
  *  adapter_name [In]  unicode string with the adapter name
  *  index        [Out] returns found interface index
- *
- * RETURNS
- *  Success: NO_ERROR
- *  Failure: error code from winerror.h
  */
 DWORD WINAPI GetAdapterIndex( WCHAR *adapter_name, ULONG *index )
 {
-    MIB_IFTABLE *if_table;
-    DWORD err, i;
+    NET_LUID luid;
+    GUID guid;
+    DWORD err;
 
     TRACE( "name %s, index %p\n", debugstr_w( adapter_name ), index );
 
-    err = AllocateAndGetIfTableFromStack( &if_table, 0, GetProcessHeap(), 0 );
+    if (strlenW( adapter_name ) < strlenW( device_tcpip )) return ERROR_INVALID_PARAMETER;
+    err = ConvertStringToGuidW( adapter_name + strlenW( device_tcpip ), &guid );
     if (err) return err;
-
-    err = ERROR_INVALID_PARAMETER;
-    for (i = 0; i < if_table->dwNumEntries; i++)
-    {
-        if (!strcmpW( adapter_name, if_table->table[i].wszName ))
-        {
-            *index = if_table->table[i].dwIndex;
-            err = ERROR_SUCCESS;
-            break;
-        }
-    }
-    heap_free( if_table );
-    return err;
+    err = ConvertInterfaceGuidToLuid( &guid, &luid );
+    if (err) return err;
+    return ConvertInterfaceLuidToIndex( &luid, index );
 }
 
 static DWORD get_wins_servers( SOCKADDR_INET **servers )
-- 
2.23.0




More information about the wine-devel mailing list