pcap: Add support to "new" Npcap native mode without setting PATH

Npcap decided not to add "C:\Windows\System32\Npcap" to
system PATH in the installation any more (starting from
Npcap 0.07 r14). So this patch needs to be applied, otherwise
Wireshark will not find Packet.dll (the error message will
only say wpcap.dll is missing, but actually is Packet.dll
missing).

Change-Id: Ifd8b6e6d8ecf9866cd37c3368b604de210ff8c7b
Reviewed-on: https://code.wireshark.org/review/15959
Reviewed-by: Yang Luo <hsluoyz@gmail.com>
Petri-Dish: Pascal Quantin <pascal.quantin@gmail.com>
Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org>
Reviewed-by: Pascal Quantin <pascal.quantin@gmail.com>
This commit is contained in:
Yang Luo 2016-06-16 11:39:32 +08:00 committed by Pascal Quantin
parent 6ccee3ecd5
commit d50b981d38
4 changed files with 12 additions and 0 deletions

View File

@ -574,6 +574,7 @@ main(int argc, char *argv[])
}
#ifdef _WIN32
ws_init_dll_search_path();
/* Load Wpcap, if possible */
load_wpcap();
#endif

View File

@ -649,6 +649,7 @@ main(int argc, char *argv[])
initialize_funnel_ops();
#ifdef _WIN32
ws_init_dll_search_path();
/* Load wpcap if possible. Do this before collecting the run-time version information */
load_wpcap();

View File

@ -383,6 +383,7 @@ int main(int argc, char *argv[])
g_log(NULL, G_LOG_LEVEL_DEBUG, "progfile_dir: %s", get_progfile_dir());
#ifdef _WIN32
ws_init_dll_search_path();
/* Load wpcap if possible. Do this before collecting the run-time version information */
load_wpcap();

View File

@ -514,6 +514,8 @@ ws_init_dll_search_path()
{
gboolean dll_dir_set = FALSE;
wchar_t *program_path_w;
wchar_t npcap_path_w[MAX_PATH];
unsigned int retval;
typedef BOOL (WINAPI *SetDllDirectoryHandler)(LPCTSTR);
SetDllDirectoryHandler PSetDllDirectory;
@ -521,6 +523,13 @@ ws_init_dll_search_path()
PSetDllDirectory = (SetDllDirectoryHandler) GetProcAddress(GetModuleHandle(_T("kernel32.dll")), "SetDllDirectoryW");
if (PSetDllDirectory) {
dll_dir_set = PSetDllDirectory(_T(""));
if (dll_dir_set) {
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 = PSetDllDirectory(npcap_path_w);
}
}
}
if (!dll_dir_set && init_dll_load_paths()) {