diff --git a/contrib/ports/win32/msvc/lwIP_Test.vcxproj b/contrib/ports/win32/msvc/lwIP_Test.vcxproj index b7f587ac..37d4dab2 100644 --- a/contrib/ports/win32/msvc/lwIP_Test.vcxproj +++ b/contrib/ports/win32/msvc/lwIP_Test.vcxproj @@ -85,6 +85,7 @@ MachineX86 true $(TargetDir)$(TargetName).map + Packet.dll;wpcap.dll;%(DelayLoadDLLs) @@ -125,6 +126,7 @@ MachineX86 false $(TargetDir)$(TargetName).map + Packet.dll;wpcap.dll;%(DelayLoadDLLs) diff --git a/contrib/ports/win32/pcapif.c b/contrib/ports/win32/pcapif.c index 3066abd0..58a42b4e 100644 --- a/contrib/ports/win32/pcapif.c +++ b/contrib/ports/win32/pcapif.c @@ -1057,6 +1057,9 @@ pcapif_init(struct netif *netif) int local_index; SYS_ARCH_DECL_PROTECT(lev); + + pcapifh_init_npcap(); + SYS_ARCH_PROTECT(lev); local_index = ethernetif_index++; SYS_ARCH_UNPROTECT(lev); diff --git a/contrib/ports/win32/pcapif_helper.c b/contrib/ports/win32/pcapif_helper.c index d0a335b1..03b92e0d 100644 --- a/contrib/ports/win32/pcapif_helper.c +++ b/contrib/ports/win32/pcapif_helper.c @@ -114,6 +114,33 @@ pcapifh_free_readonly_mem(void *data) } } +/** + * Npcap keeps its DLLs in a different directory for compatiblity with winpcap. + * Make sure they get found by adding that directory to the DLL search path. + */ +void pcapifh_init_npcap(void) +{ + char npcap_dir[512]; + unsigned int len; + static char npcap_initialized = 0; + + if (!npcap_initialized) + { + npcap_initialized = 1; + + len = GetSystemDirectory(npcap_dir, 480); + if (!len) { + lwip_win32_platform_diag("Error in GetSystemDirectory: %x", GetLastError()); + return; + } + strcat_s(npcap_dir, 512, "\\Npcap"); + if (SetDllDirectory(npcap_dir) == 0) { + lwip_win32_platform_diag("Error in SetDllDirectory: %x", GetLastError()); + return; + } + } +} + #else /* WIN32 */ /* @todo: add linux/unix implementation? */ @@ -138,4 +165,8 @@ void pcapifh_linkstate_close(struct pcapifh_linkstate* state) LWIP_UNUSED_ARG(state); } +void pcapifh_init_npcap(void) +{ +} + #endif /* WIN32 */ diff --git a/contrib/ports/win32/pcapif_helper.h b/contrib/ports/win32/pcapif_helper.h index d4315a0a..fd1c5277 100644 --- a/contrib/ports/win32/pcapif_helper.h +++ b/contrib/ports/win32/pcapif_helper.h @@ -22,6 +22,8 @@ void pcapifh_linkstate_close(struct pcapifh_linkstate* state); void *pcapifh_alloc_readonly_copy(void *data, size_t len); void pcapifh_free_readonly_mem(void *data); +void pcapifh_init_npcap(void); + #ifdef __cplusplus } #endif