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