mirror of
https://github.com/lwip-tcpip/lwip.git
synced 2024-10-02 12:52:10 +00:00
win32: pcapif: ensure we can run with npcap as well
By default, npcap keeps its DLLs not in system32 but in system32/npcap. To load DLLs from there, mark them as "delay load DLLs" and adjust the DLL search path before using/loading them. Signed-off-by: Simon Goldschmidt <goldsimon@gmx.de>
This commit is contained in:
parent
bfcbf80221
commit
1a5dffb931
@ -85,6 +85,7 @@
|
|||||||
<TargetMachine>MachineX86</TargetMachine>
|
<TargetMachine>MachineX86</TargetMachine>
|
||||||
<GenerateMapFile>true</GenerateMapFile>
|
<GenerateMapFile>true</GenerateMapFile>
|
||||||
<MapFileName>$(TargetDir)$(TargetName).map</MapFileName>
|
<MapFileName>$(TargetDir)$(TargetName).map</MapFileName>
|
||||||
|
<DelayLoadDLLs>Packet.dll;wpcap.dll;%(DelayLoadDLLs)</DelayLoadDLLs>
|
||||||
</Link>
|
</Link>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
@ -125,6 +126,7 @@
|
|||||||
<TargetMachine>MachineX86</TargetMachine>
|
<TargetMachine>MachineX86</TargetMachine>
|
||||||
<GenerateMapFile>false</GenerateMapFile>
|
<GenerateMapFile>false</GenerateMapFile>
|
||||||
<MapFileName>$(TargetDir)$(TargetName).map</MapFileName>
|
<MapFileName>$(TargetDir)$(TargetName).map</MapFileName>
|
||||||
|
<DelayLoadDLLs>Packet.dll;wpcap.dll;%(DelayLoadDLLs)</DelayLoadDLLs>
|
||||||
</Link>
|
</Link>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
@ -1057,6 +1057,9 @@ pcapif_init(struct netif *netif)
|
|||||||
|
|
||||||
int local_index;
|
int local_index;
|
||||||
SYS_ARCH_DECL_PROTECT(lev);
|
SYS_ARCH_DECL_PROTECT(lev);
|
||||||
|
|
||||||
|
pcapifh_init_npcap();
|
||||||
|
|
||||||
SYS_ARCH_PROTECT(lev);
|
SYS_ARCH_PROTECT(lev);
|
||||||
local_index = ethernetif_index++;
|
local_index = ethernetif_index++;
|
||||||
SYS_ARCH_UNPROTECT(lev);
|
SYS_ARCH_UNPROTECT(lev);
|
||||||
|
@ -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 */
|
#else /* WIN32 */
|
||||||
|
|
||||||
/* @todo: add linux/unix implementation? */
|
/* @todo: add linux/unix implementation? */
|
||||||
@ -138,4 +165,8 @@ void pcapifh_linkstate_close(struct pcapifh_linkstate* state)
|
|||||||
LWIP_UNUSED_ARG(state);
|
LWIP_UNUSED_ARG(state);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void pcapifh_init_npcap(void)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* WIN32 */
|
#endif /* WIN32 */
|
||||||
|
@ -22,6 +22,8 @@ void pcapifh_linkstate_close(struct pcapifh_linkstate* state);
|
|||||||
void *pcapifh_alloc_readonly_copy(void *data, size_t len);
|
void *pcapifh_alloc_readonly_copy(void *data, size_t len);
|
||||||
void pcapifh_free_readonly_mem(void *data);
|
void pcapifh_free_readonly_mem(void *data);
|
||||||
|
|
||||||
|
void pcapifh_init_npcap(void);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user