|
|
|
|
@ -474,29 +474,6 @@ WindowsEthernetTap::WindowsEthernetTap(
|
|
|
|
|
char data[1024]; |
|
|
|
|
char tag[24]; |
|
|
|
|
|
|
|
|
|
// Initialize COM
|
|
|
|
|
HRESULT hres = CoInitializeEx(0, COINIT_MULTITHREADED); |
|
|
|
|
if (FAILED(hres)) { |
|
|
|
|
throw std::runtime_error("WinEthernetTap: COM initialization failed"); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
hres = CoInitializeSecurity( |
|
|
|
|
NULL, |
|
|
|
|
-1, |
|
|
|
|
NULL, |
|
|
|
|
NULL, |
|
|
|
|
RPC_C_AUTHN_LEVEL_DEFAULT, |
|
|
|
|
RPC_C_IMP_LEVEL_IMPERSONATE, |
|
|
|
|
NULL, |
|
|
|
|
EOAC_NONE, |
|
|
|
|
NULL |
|
|
|
|
); |
|
|
|
|
if (FAILED(hres)) { |
|
|
|
|
CoUninitialize(); |
|
|
|
|
throw std::runtime_error("WinEthernetTap: Failed to initialize security"); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// We "tag" registry entries with the network ID to identify persistent devices
|
|
|
|
|
OSUtils::ztsnprintf(tag,sizeof(tag),"%.16llx",(unsigned long long)nwid); |
|
|
|
|
|
|
|
|
|
@ -970,6 +947,12 @@ NET_IFINDEX WindowsEthernetTap::interfaceIndex() const
|
|
|
|
|
void WindowsEthernetTap::threadMain() |
|
|
|
|
throw() |
|
|
|
|
{ |
|
|
|
|
HRESULT hres = CoInitializeEx(0, COINIT_MULTITHREADED); |
|
|
|
|
if (FAILED(hres)) { |
|
|
|
|
fprintf(stderr, "WinEthernetTap: COM initialization failed"); |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
char tapReadBuf[ZT_MAX_MTU + 32]; |
|
|
|
|
char tapPath[128]; |
|
|
|
|
HANDLE wait4[3]; |
|
|
|
|
|