[PATCH 3/5] iphlpapi: Implement ConvertInterfaceLuidToAlias().

Huw Davies huw at codeweavers.com
Wed Jul 7 03:05:56 CDT 2021


Signed-off-by: Huw Davies <huw at codeweavers.com>
---
 dlls/iphlpapi/iphlpapi.spec    |  2 +-
 dlls/iphlpapi/iphlpapi_main.c  | 24 ++++++++++++++++++++++++
 dlls/iphlpapi/tests/iphlpapi.c | 11 +++++++++++
 include/netioapi.h             |  1 +
 4 files changed, 37 insertions(+), 1 deletion(-)

diff --git a/dlls/iphlpapi/iphlpapi.spec b/dlls/iphlpapi/iphlpapi.spec
index 9180eb84af7..604852a754d 100644
--- a/dlls/iphlpapi/iphlpapi.spec
+++ b/dlls/iphlpapi/iphlpapi.spec
@@ -15,7 +15,7 @@
 @ stdcall ConvertInterfaceAliasToLuid( ptr ptr )
 @ stdcall ConvertInterfaceGuidToLuid( ptr ptr )
 @ stdcall ConvertInterfaceIndexToLuid( long ptr )
-#@ stub ConvertInterfaceLuidToAlias
+@ stdcall ConvertInterfaceLuidToAlias( ptr ptr long )
 @ stdcall ConvertInterfaceLuidToGuid( ptr ptr )
 @ stdcall ConvertInterfaceLuidToIndex( ptr ptr )
 @ stdcall ConvertInterfaceLuidToNameA( ptr ptr long )
diff --git a/dlls/iphlpapi/iphlpapi_main.c b/dlls/iphlpapi/iphlpapi_main.c
index 448c1d873af..e5dc1012cb0 100644
--- a/dlls/iphlpapi/iphlpapi_main.c
+++ b/dlls/iphlpapi/iphlpapi_main.c
@@ -3241,6 +3241,30 @@ DWORD WINAPI ConvertInterfaceIndexToLuid(NET_IFINDEX index, NET_LUID *luid)
     return err;
 }
 
+/******************************************************************
+ *    ConvertInterfaceLuidToAlias (IPHLPAPI.@)
+ */
+DWORD WINAPI ConvertInterfaceLuidToAlias( const NET_LUID *luid, WCHAR *alias, SIZE_T len )
+{
+    DWORD err;
+    IF_COUNTED_STRING name;
+
+    TRACE( "(%p %p %u)\n", luid, alias, (DWORD)len );
+
+    if (!luid || !alias) return ERROR_INVALID_PARAMETER;
+
+    err = NsiGetParameter( 1, &NPI_MS_NDIS_MODULEID, NSI_NDIS_IFINFO_TABLE, luid, sizeof(*luid),
+                           NSI_PARAM_TYPE_RW, &name, sizeof(name),
+                           FIELD_OFFSET(struct nsi_ndis_ifinfo_rw, alias) );
+    if (err) return err;
+
+    if (len <= name.Length / sizeof(WCHAR)) return ERROR_NOT_ENOUGH_MEMORY;
+    memcpy( alias, name.String, name.Length );
+    alias[name.Length / sizeof(WCHAR)] = '\0';
+
+    return err;
+}
+
 /******************************************************************
  *    ConvertInterfaceLuidToGuid (IPHLPAPI.@)
  */
diff --git a/dlls/iphlpapi/tests/iphlpapi.c b/dlls/iphlpapi/tests/iphlpapi.c
index 480d6ac06c5..e43cb9b1f78 100644
--- a/dlls/iphlpapi/tests/iphlpapi.c
+++ b/dlls/iphlpapi/tests/iphlpapi.c
@@ -1625,6 +1625,7 @@ static void test_interface_identifier_conversion(void)
     GUID guid;
     SIZE_T len;
     WCHAR nameW[IF_MAX_STRING_SIZE + 1];
+    WCHAR alias[IF_MAX_STRING_SIZE + 1];
     char nameA[IF_MAX_STRING_SIZE + 1], *name;
     NET_IFINDEX index;
     MIB_IF_TABLE2 *table;
@@ -1779,6 +1780,16 @@ static void test_interface_identifier_conversion(void)
         ok( !ret, "got %u\n", ret );
         ok( luid.Value == row->InterfaceLuid.Value, "mismatch\n" );
 
+        /* ConvertInterfaceAliasToLuid */
+        ret = ConvertInterfaceAliasToLuid( row->Alias, &luid );
+        ok( !ret, "got %u\n", ret );
+        ok( luid.Value == row->InterfaceLuid.Value, "mismatch\n" );
+
+        /* ConvertInterfaceLuidToAlias */
+        ret = ConvertInterfaceLuidToAlias( &row->InterfaceLuid, alias, ARRAY_SIZE(alias) );
+        ok( !ret, "got %u\n", ret );
+        ok( !wcscmp( alias, row->Alias ), "got %s vs %s\n", wine_dbgstr_w( alias ), wine_dbgstr_w( row->Alias ) );
+
         index = if_nametoindex( NULL );
         ok( !index, "Got unexpected index %u\n", index );
         index = if_nametoindex( nameA );
diff --git a/include/netioapi.h b/include/netioapi.h
index 6d08d54a444..055266d946e 100644
--- a/include/netioapi.h
+++ b/include/netioapi.h
@@ -241,6 +241,7 @@ typedef VOID (WINAPI *PIPFORWARD_CHANGE_CALLBACK)(VOID*,MIB_IPFORWARD_ROW2*,MIB_
 DWORD WINAPI ConvertInterfaceAliasToLuid(const WCHAR*,NET_LUID*);
 DWORD WINAPI ConvertInterfaceGuidToLuid(const GUID*,NET_LUID*);
 DWORD WINAPI ConvertInterfaceIndexToLuid(NET_IFINDEX,NET_LUID*);
+DWORD WINAPI ConvertInterfaceLuidToAlias(const NET_LUID*,WCHAR*,SIZE_T);
 DWORD WINAPI ConvertInterfaceLuidToGuid(const NET_LUID*,GUID*);
 DWORD WINAPI ConvertInterfaceLuidToIndex(const NET_LUID*,NET_IFINDEX*);
 DWORD WINAPI ConvertInterfaceLuidToNameA(const NET_LUID*,char*,SIZE_T);
-- 
2.23.0




More information about the wine-devel mailing list