diff --git a/CMakeLists.txt b/CMakeLists.txt index 7e42fd9..5834468 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -6,6 +6,7 @@ option(LIBICSNEO_BUILD_DOCS "Build documentation. Don't use in Visual Studio." O option(LIBICSNEO_BUILD_ICSNEOC "Build dynamic C library" ON) option(LIBICSNEO_BUILD_ICSNEOC_STATIC "Build static C library" ON) option(LIBICSNEO_BUILD_ICSNEOLEGACY "Build icsnVC40 compatibility library" ON) +set(LIBICSNEO_NPCAP_INCLUDE_DIR "" CACHE STRING "Npcap include directory; set to build with Npcap") set(CMAKE_CXX_STANDARD 11) @@ -182,8 +183,13 @@ endif(NOT WIN32) # winpcap if(WIN32) - target_include_directories(icsneocpp PUBLIC AFTER third-party/winpcap/include) - add_definitions(-DWPCAP -DHAVE_REMOTE -DWIN32_LEAN_AND_MEAN) + if(LIBICSNEO_NPCAP_INCLUDE_DIR STREQUAL "") + target_include_directories(icsneocpp PUBLIC AFTER third-party/winpcap/include) + add_definitions(-DWPCAP -DHAVE_REMOTE -DWIN32_LEAN_AND_MEAN) + else() + target_include_directories(icsneocpp PUBLIC AFTER ${LIBICSNEO_NPCAP_INCLUDE_DIR}) + add_definitions(-DNPCAP -DWIN32_LEAN_AND_MEAN) + endif() endif(WIN32) if(LIBICSNEO_BUILD_ICSNEOC) diff --git a/platform/windows/internal/pcapdll.cpp b/platform/windows/internal/pcapdll.cpp index 6b02802..77a15a1 100644 --- a/platform/windows/internal/pcapdll.cpp +++ b/platform/windows/internal/pcapdll.cpp @@ -27,6 +27,21 @@ bool PCAPDLL::ok() const PCAPDLL::PCAPDLL() { +#ifdef NPCAP + BOOL(WINAPI * SetDllDirectory)(LPCTSTR); + char sysdir_name[512]; + int len; + SetDllDirectory = (BOOL(WINAPI*)(LPCTSTR)) GetProcAddress(GetModuleHandle("kernel32.dll"), "SetDllDirectoryA"); + if (SetDllDirectory != NULL) + { + len = GetSystemDirectory(sysdir_name, 480); // be safe + if (len) + { + strcat(sysdir_name, "\\Npcap"); + SetDllDirectory(sysdir_name); + } + } +#endif dll = LoadLibrary("wpcap.dll"); if(dll == NULL) {