forked from osmocom/wireshark
Windows: prioritize Npcap over WinPcap
It is now considered stable enough to be our default capture driver if present Change-Id: I7f3cdabcbaea526949afa47164e520202e6b93f2 Reviewed-on: https://code.wireshark.org/review/27393 Petri-Dish: Pascal Quantin <pascal.quantin@gmail.com> Tested-by: Petri Dish Buildbot Reviewed-by: Gerald Combs <gerald@wireshark.org> Reviewed-by: Pascal Quantin <pascal.quantin@gmail.com>
This commit is contained in:
parent
8756d0ad12
commit
e9c5d937b5
|
@ -1072,7 +1072,7 @@ get_runtime_caplibs_version(GString *str)
|
||||||
g_string_append_printf(str, "WinPcap (%s)", packetVer);
|
g_string_append_printf(str, "WinPcap (%s)", packetVer);
|
||||||
}
|
}
|
||||||
} else
|
} else
|
||||||
g_string_append(str, "without WinPcap");
|
g_string_append(str, "without Npcap or WinPcap");
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -1088,9 +1088,9 @@ npf_sys_is_running(void)
|
||||||
if (!h_scm)
|
if (!h_scm)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
h_serv = OpenService(h_scm, _T("npf"), SC_MANAGER_CONNECT|SERVICE_QUERY_STATUS);
|
h_serv = OpenService(h_scm, _T("npcap"), SC_MANAGER_CONNECT|SERVICE_QUERY_STATUS);
|
||||||
if (!h_serv) {
|
if (!h_serv) {
|
||||||
h_serv = OpenService(h_scm, _T("npcap"), SC_MANAGER_CONNECT|SERVICE_QUERY_STATUS);
|
h_serv = OpenService(h_scm, _T("npf"), SC_MANAGER_CONNECT|SERVICE_QUERY_STATUS);
|
||||||
if (!h_serv) {
|
if (!h_serv) {
|
||||||
CloseServiceHandle(h_scm);
|
CloseServiceHandle(h_scm);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
|
@ -491,32 +491,18 @@ init_dll_load_paths()
|
||||||
gboolean
|
gboolean
|
||||||
ws_init_dll_search_path()
|
ws_init_dll_search_path()
|
||||||
{
|
{
|
||||||
gboolean dll_dir_set = FALSE, npf_found = FALSE;
|
gboolean dll_dir_set = FALSE;
|
||||||
wchar_t *program_path_w;
|
wchar_t *program_path_w;
|
||||||
wchar_t npcap_path_w[MAX_PATH];
|
wchar_t npcap_path_w[MAX_PATH];
|
||||||
unsigned int retval;
|
unsigned int retval;
|
||||||
SC_HANDLE h_scm, h_serv;
|
|
||||||
|
|
||||||
dll_dir_set = SetDllDirectory(_T(""));
|
dll_dir_set = SetDllDirectory(_T(""));
|
||||||
if (dll_dir_set) {
|
if (dll_dir_set) {
|
||||||
/* Do not systematically add Npcap path as long as we favor WinPcap over Npcap. */
|
/* Add Npcap folder to libraries search path. */
|
||||||
h_scm = OpenSCManager(NULL, NULL, 0);
|
retval = GetSystemDirectoryW(npcap_path_w, MAX_PATH);
|
||||||
if (h_scm) {
|
if (0 < retval && retval <= MAX_PATH) {
|
||||||
h_serv = OpenService(h_scm, _T("npf"), SC_MANAGER_CONNECT|SERVICE_QUERY_STATUS);
|
wcscat_s(npcap_path_w, MAX_PATH, L"\\Npcap");
|
||||||
if (h_serv) {
|
dll_dir_set = SetDllDirectory(npcap_path_w);
|
||||||
CloseServiceHandle(h_serv);
|
|
||||||
npf_found = TRUE;
|
|
||||||
}
|
|
||||||
CloseServiceHandle(h_scm);
|
|
||||||
}
|
|
||||||
if (!npf_found) {
|
|
||||||
/* npf service was not found, so WinPcap is not (properly) installed.
|
|
||||||
Add Npcap folder to libraries search path. */
|
|
||||||
retval = GetSystemDirectoryW(npcap_path_w, MAX_PATH);
|
|
||||||
if (0 < retval && retval <= MAX_PATH) {
|
|
||||||
wcscat_s(npcap_path_w, MAX_PATH, L"\\Npcap");
|
|
||||||
dll_dir_set = SetDllDirectory(npcap_path_w);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -595,8 +581,8 @@ ws_module_open(gchar *module_name, GModuleFlags flags)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Next try the system directory */
|
/* Next try the Npcap directory */
|
||||||
full_path = g_module_build_path(system_path, module_name);
|
full_path = g_module_build_path(npcap_path, module_name);
|
||||||
|
|
||||||
if (full_path) {
|
if (full_path) {
|
||||||
mod = g_module_open(full_path, flags);
|
mod = g_module_open(full_path, flags);
|
||||||
|
@ -606,8 +592,8 @@ ws_module_open(gchar *module_name, GModuleFlags flags)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* At last try the Npcap directory */
|
/* At last try the system directory */
|
||||||
full_path = g_module_build_path(npcap_path, module_name);
|
full_path = g_module_build_path(system_path, module_name);
|
||||||
|
|
||||||
if (full_path) {
|
if (full_path) {
|
||||||
mod = g_module_open(full_path, flags);
|
mod = g_module_open(full_path, flags);
|
||||||
|
|
Loading…
Reference in New Issue