From 5290b60ab3b83ca3d5e16210c01393b31bab6815 Mon Sep 17 00:00:00 2001 From: Guy Harris Date: Sat, 24 Nov 2012 00:05:32 +0000 Subject: [PATCH] Rename get_windows_interface_friendlyname() to get_windows_interface_friendly_name(), and have it return the friendly name on success and NULL on failure. Get rid of the logging in get_windows_interface_friendly_name(). svn path=/trunk/; revision=46161 --- capture-pcap-util.c | 2 +- capture_win_ifnames.c | 153 ++++++-------------------- capture_win_ifnames.h | 2 +- ui/gtk/capture_if_details_dlg_win32.c | 10 +- 4 files changed, 43 insertions(+), 124 deletions(-) diff --git a/capture-pcap-util.c b/capture-pcap-util.c index 06eff2b06b..e1ce888695 100644 --- a/capture-pcap-util.c +++ b/capture-pcap-util.c @@ -71,7 +71,7 @@ if_info_new(const char *name, const char *description, gboolean loopback) * and the friendly name isn't returned by WinPcap. * Fetch it ourselves. */ - get_windows_interface_friendlyname(name, &if_info->friendly_name); + if_info->friendly_name = get_windows_interface_friendly_name(name); if_info->vendor_description = g_strdup(description); #else /* diff --git a/capture_win_ifnames.c b/capture_win_ifnames.c index 7c9a7ebcb4..1687e4aa84 100644 --- a/capture_win_ifnames.c +++ b/capture_win_ifnames.c @@ -66,33 +66,11 @@ gboolean IsWindowsVistaOrLater() } return FALSE; } -/**********************************************************************************/ -/* The wireshark gui doesn't appear at this stage to support having logging messages -* returned using g_log() before the interface list. -* Below is a generic logging function that can be easily ripped out or configured to -* redirect to g_log() if the behaviour changes in the future. -*/ -static void ifnames_log(const gchar *log_domain, GLogLevelFlags log_level, const gchar *format, ...) -{ - char buf[16384]; - va_list args; - if(log_level!=G_LOG_LEVEL_ERROR){ - return; - } - - va_start(args, format); - vsnprintf(buf, 16383, format, args); - va_end(args); - - fprintf(stderr,"%s\r\n",buf); - -} - -#define g_log ifnames_log /**********************************************************************************/ /* Get the Connection Name for the given GUID */ -static int GetInterfaceFriendlyNameFromDeviceGuid(__in GUID *guid, __out char **Name) +static char * +GetInterfaceFriendlyNameFromDeviceGuid(__in GUID *guid) { HMODULE hIPHlpApi; HRESULT status; @@ -100,23 +78,16 @@ static int GetInterfaceFriendlyNameFromDeviceGuid(__in GUID *guid, __out char ** HRESULT hr; gboolean fallbackToUnpublishedApi=TRUE; gboolean haveInterfaceFriendlyName=FALSE; - - /* check we have a parameter */ - if(Name==NULL){ - return -1; - } + int size; + char *name; /* Load the ip helper api DLL */ hIPHlpApi = LoadLibrary(TEXT("iphlpapi.dll")); if (hIPHlpApi == NULL) { /* Load failed - DLL should always be available in XP+*/ - g_log(LOG_DOMAIN_CAPTURE, G_LOG_LEVEL_ERROR, - "Failed to load iphlpapi.dll library for interface name lookups, errorcode=0x%08x\n", GetLastError()); - return -1; + return NULL; } - g_log(LOG_DOMAIN_CAPTURE, G_LOG_LEVEL_DEBUG, "Loaded iphlpapi.dll library for interface friendly name lookups"); - /* Need to convert an Interface GUID to the interface friendly name (e.g. "Local Area Connection") * The functions required to do this all reside within iphlpapi.dll * - The preferred approach is to use published API functions (Available since Windows Vista) @@ -143,27 +114,15 @@ static int GetInterfaceFriendlyNameFromDeviceGuid(__in GUID *guid, __out char ** if(hr==NO_ERROR){ /* luid->friendly name success */ haveInterfaceFriendlyName=TRUE; /* success */ - g_log(LOG_DOMAIN_CAPTURE, G_LOG_LEVEL_DEBUG, - "converted interface guid to friendly name."); }else{ /* luid->friendly name failed */ fallbackToUnpublishedApi=FALSE; - g_log(LOG_DOMAIN_CAPTURE, G_LOG_LEVEL_MESSAGE, - "ConvertInterfaceLuidToAlias failed to convert interface luid to a friendly name, LastErrorCode=0x%08x.", GetLastError()); } }else{ fallbackToUnpublishedApi=FALSE; - g_log(LOG_DOMAIN_CAPTURE, G_LOG_LEVEL_MESSAGE, - "ConvertInterfaceGuidToLuid failed to convert interface guid to a luid, LastErrorCode=0x%08x.", GetLastError()); } - }else{ - g_log(LOG_DOMAIN_CAPTURE, G_LOG_LEVEL_ERROR, - "Failed to find address of ConvertInterfaceLuidToAlias in iphlpapi.dll, LastErrorCode=0x%08x.", GetLastError()); } - }else{ - g_log(LOG_DOMAIN_CAPTURE, G_LOG_LEVEL_ERROR, - "Failed to find address of ConvertInterfaceGuidToLuid in iphlpapi.dll, LastErrorCode=0x%08x.", GetLastError()); } } @@ -180,9 +139,6 @@ static int GetInterfaceFriendlyNameFromDeviceGuid(__in GUID *guid, __out char ** wchar_t *p4=NULL, *p5=NULL; DWORD NameSize; - g_log(LOG_DOMAIN_CAPTURE, G_LOG_LEVEL_DEBUG, - "Unpublished NhGetInterfaceNameFromGuid function located in iphlpapi.dll, looking up friendly name from guid"); - /* testing of nhGetInterfaceNameFromGuid indicates the unpublished API function expects the 3rd parameter * to be the available space in bytes (as compared to wchar's) available in the second parameter buffer * to receive the friendly name (in unicode format) including the space for the nul termination.*/ @@ -191,20 +147,10 @@ static int GetInterfaceFriendlyNameFromDeviceGuid(__in GUID *guid, __out char ** /* do the guid->friendlyname lookup */ status = Proc_nhGetInterfaceNameFromGuid(guid, wName, &NameSize, p4, p5); - g_log(LOG_DOMAIN_CAPTURE, G_LOG_LEVEL_DEBUG, - "nhGetInterfaceNameFromGuidProc status =%d, p4=%d, p5=%d, namesize=%d\n", status, (int)p4, (int)p5, NameSize); if(status==0){ haveInterfaceFriendlyName=TRUE; /* success */ - g_log(LOG_DOMAIN_CAPTURE, G_LOG_LEVEL_DEBUG, - "Converted interface guid to friendly name."); } - - }else{ - g_log(LOG_DOMAIN_CAPTURE, G_LOG_LEVEL_ERROR, - "Failed to locate unpublished NhGetInterfaceNameFromGuid function located in iphlpapi.dll, " - "for looking up interface friendly name, LastErrorCode=0x%08x.", GetLastError()); } - } /* we have finished with iphlpapi.dll - release it */ @@ -212,31 +158,22 @@ static int GetInterfaceFriendlyNameFromDeviceGuid(__in GUID *guid, __out char ** if(!haveInterfaceFriendlyName){ /* failed to get the friendly name, nothing further to do */ - return -1; + return NULL; } /* Get the required buffer size, and then convert the string */ - { - int size = WideCharToMultiByte(CP_UTF8, 0, wName, -1, NULL, 0, NULL, NULL); - char *name = (char *) g_malloc(size); - if (name == NULL){ - g_log(LOG_DOMAIN_CAPTURE, G_LOG_LEVEL_ERROR, - "Failed to allocate memory to convert format of interface friendly name, LastErrorCode=0x%08x.", GetLastError()); - return -1; - } - size=WideCharToMultiByte(CP_UTF8, 0, wName, -1, name, size, NULL, NULL); - if(size==0){ - /* bytes written == 0, indicating some form of error*/ - g_log(LOG_DOMAIN_CAPTURE, G_LOG_LEVEL_ERROR, - "Error converting format of interface friendly name, LastErrorCode=0x%08x.", GetLastError()); - g_free(name); - return -1; - } - g_log(LOG_DOMAIN_CAPTURE, G_LOG_LEVEL_MESSAGE, "Friendly name is '%s'", name); - - *Name = name; + size=WideCharToMultiByte(CP_UTF8, 0, wName, -1, NULL, 0, NULL, NULL); + name=(char *) g_malloc(size); + if (name == NULL){ + return NULL; } - return 0; + size=WideCharToMultiByte(CP_UTF8, 0, wName, -1, name, size, NULL, NULL); + if(size==0){ + /* bytes written == 0, indicating some form of error*/ + g_free(name); + return NULL; + } + return name; } static int gethexdigit(const char *p) @@ -291,23 +228,20 @@ static gboolean get4hexdigits(const char *p, WORD *w) /**********************************************************************************/ /* returns the interface friendly name for a device name, if it is unable to * resolve the name, "" is returned */ -void get_windows_interface_friendlyname(/* IN */ const char *interface_devicename, /* OUT */char **interface_friendlyname) +char * +get_windows_interface_friendly_name(/* IN */ char *interface_devicename) { const char* guid_text; GUID guid; int i; int digit1, digit2; - g_log(LOG_DOMAIN_CAPTURE, G_LOG_LEVEL_DEBUG, "test, 1,2,3"); - /* ensure we can return a result */ if(interface_friendlyname==NULL){ - g_log(LOG_DOMAIN_CAPTURE, G_LOG_LEVEL_ERROR, - "invalid interface_friendlyname parameter to get_windows_interface_friendlyname() function."); - return; + return NULL; } /* start on the basis we know nothing */ - *interface_friendlyname=NULL; + interface_friendlyname=NULL; /* Extract the guid text from the interface device name */ if(strncmp("\\Device\\NPF_", interface_devicename, 12)==0){ @@ -321,37 +255,37 @@ void get_windows_interface_friendlyname(/* IN */ const char *interface_devicenam * and use that to look up the interface to get its friendly name. */ if(*guid_text != '{'){ - return; /* Nope, not enclosed in {} */ + return NULL; /* Nope, not enclosed in {} */ } guid_text++; /* There must be 8 hex digits; if so, they go into guid.Data1 */ if(!get8hexdigits(guid_text, &guid.Data1)){ - return; /* nope, not 8 hex digits */ + return NULL; /* nope, not 8 hex digits */ } guid_text += 8; /* Now there must be a hyphen */ if(*guid_text != '-'){ - return; /* Nope */ + return NULL; /* Nope */ } guid_text++; /* There must be 4 hex digits; if so, they go into guid.Data2 */ if(!get4hexdigits(guid_text, &guid.Data2)){ - return; /* nope, not 4 hex digits */ + return NULL; /* nope, not 4 hex digits */ } guid_text += 4; /* Now there must be a hyphen */ if(*guid_text != '-'){ - return; /* Nope */ + return NULL; /* Nope */ } guid_text++; /* There must be 4 hex digits; if so, they go into guid.Data3 */ if(!get4hexdigits(guid_text, &guid.Data3)){ - return; /* nope, not 4 hex digits */ + return NULL; /* nope, not 4 hex digits */ } guid_text += 4; /* Now there must be a hyphen */ if(*guid_text != '-'){ - return; /* Nope */ + return NULL; /* Nope */ } guid_text++; /* @@ -361,19 +295,19 @@ void get_windows_interface_friendlyname(/* IN */ const char *interface_devicenam for(i = 0; i < 2; i++){ digit1 = gethexdigit(guid_text); if(digit1 == -1){ - return; /* Not a hex digit */ + return NULL; /* Not a hex digit */ } guid_text++; digit2 = gethexdigit(guid_text); if(digit2 == -1){ - return; /* Not a hex digit */ + return NULL; /* Not a hex digit */ } guid_text++; guid.Data4[i] = (digit1 << 4)|(digit2); } /* Now there must be a hyphen */ if(*guid_text != '-'){ - return; /* Nope */ + return NULL; /* Nope */ } guid_text++; /* @@ -383,45 +317,30 @@ void get_windows_interface_friendlyname(/* IN */ const char *interface_devicenam for(i = 0; i < 6; i++){ digit1 = gethexdigit(guid_text); if(digit1 == -1){ - return; /* Not a hex digit */ + return NULL; /* Not a hex digit */ } guid_text++; digit2 = gethexdigit(guid_text); if(digit2 == -1){ - return; /* Not a hex digit */ + return NULL; /* Not a hex digit */ } guid_text++; guid.Data4[i+2] = (digit1 << 4)|(digit2); } /* Now there must be a closing } */ if(*guid_text != '}'){ - return; /* Nope */ + return NULL; /* Nope */ } guid_text++; /* And that must be the end of the string */ if(*guid_text != '\0'){ - return; /* Nope */ + return NULL; /* Nope */ } /* guid okay, get the interface friendly name associated with the guid */ - { - int r=GetInterfaceFriendlyNameFromDeviceGuid(&guid, interface_friendlyname); - if(r!=NO_ERROR){ - /* A message has been logged by GetInterfaceFriendlyNameFromDeviceGuid() */ - *interface_friendlyname=NULL; /* failed to get friendly name, ensure the ultimate result is NULL */ - return; - } - } - - /* success */ - g_log(LOG_DOMAIN_CAPTURE, G_LOG_LEVEL_MESSAGE, - "\nInterface %s => '%s'\n\n\n", interface_devicename, *interface_friendlyname); - - return; + return GetInterfaceFriendlyNameFromDeviceGuid(&guid); } -#undef g_log - /**************************************************************************************/ #endif diff --git a/capture_win_ifnames.h b/capture_win_ifnames.h index 5b7d125e71..faf1e2f7e9 100644 --- a/capture_win_ifnames.h +++ b/capture_win_ifnames.h @@ -26,6 +26,6 @@ #ifndef CAPTURE_WIN_IFNAMES_H #define CAPTURE_WIN_IFNAMES_H -void get_windows_interface_friendlyname(/* IN */ const char *interface_devicename, /* OUT */char **interface_friendlyname); +char *get_windows_interface_friendly_name(/* IN */ char *interface_devicename); #endif diff --git a/ui/gtk/capture_if_details_dlg_win32.c b/ui/gtk/capture_if_details_dlg_win32.c index f3886115fb..6f6988e2dc 100644 --- a/ui/gtk/capture_if_details_dlg_win32.c +++ b/ui/gtk/capture_if_details_dlg_win32.c @@ -1779,7 +1779,7 @@ capture_if_details_task_offload(GtkWidget *table, GtkWidget *main_vb, guint *row static int capture_if_details_general(GtkWidget *table, GtkWidget *main_vb, guint *row, LPADAPTER adapter, gchar *iface) { - gchar *interface_friendlyname; + gchar *interface_friendly_name; gchar string_buff[DETAILS_STR_MAX]; const gchar *manuf_name; unsigned int uint_value; @@ -1800,10 +1800,10 @@ capture_if_details_general(GtkWidget *table, GtkWidget *main_vb, guint *row, LPA add_string_to_table(table, row, "Characteristics", ""); /* OS friendly name - look it up from iface ("\Device\NPF_{11111111-2222-3333-4444-555555555555}") */ - get_windows_interface_friendlyname(/* IN */ iface, /* OUT */&interface_friendlyname); - if(interface_friendlyname!=NULL){ - add_string_to_table(table, row, "OS Friendly name", interface_friendlyname); - g_free(interface_friendlyname); + interface_friendly_name = get_windows_interface_friendly_name(/* IN */ iface); + if(interface_friendly_name!=NULL){ + add_string_to_table(table, row, "OS Friendly name", interface_friendly_name); + g_free(interface_friendly_name); } /* Vendor description */