From edad580c32abd4d25751460b61dcc8c12a2caf1f Mon Sep 17 00:00:00 2001 From: Adam Ierymenko Date: Wed, 21 Aug 2013 10:18:05 -0400 Subject: Some work on Windows tap. --- node/EthernetTap.cpp | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) (limited to 'node') diff --git a/node/EthernetTap.cpp b/node/EthernetTap.cpp index 1cc15c14..dd555576 100644 --- a/node/EthernetTap.cpp +++ b/node/EthernetTap.cpp @@ -679,12 +679,17 @@ void EthernetTap::threadMain() #include #include +#include #include +#include +#include +#include namespace ZeroTier { EthernetTap::EthernetTap( const RuntimeEnvironment *renv, + const char *tag, const MAC &mac, unsigned int mtu, void (*handler)(void *,const MAC &,const MAC &,unsigned int,const Buffer<4096> &), @@ -696,6 +701,31 @@ EthernetTap::EthernetTap( _handler(handler), _arg(arg) { + HKEY nwAdapters; + if (RegOpenKeyExA(HKEY_LOCAL_MACHINE,"SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002BE10318}",0,KEY_ALL_ACCESS,&nwAdapters) != ERROR_SUCCESS) + throw std::runtime_error("unable to open registry key for network adapter enumeration"); + + for(DWORD subkeyIndex=0;subkeyIndex!=-1;) { + char subkeyName[1024]; + char subkeyClass[1024]; + DWORD subkeyNameLen = sizeof(subkeyName); + DWORD subkeyClassLen = sizeof(subkeyClass); + FILETIME lastWriteTime; + switch (RegEnumKeyExA(nwAdapters,subkeyIndex++,subkeyName,&subkeyNameLen,(DWORD *)0,subkeyClass,&subkeyClassLen,&lastWriteTime)) { + case ERROR_NO_MORE_ITEMS: subkeyIndex = -1; break; + case ERROR_SUCCESS: { + DWORD type = 0; + char data[1024]; + DWORD dataLen = sizeof(data); + if (RegGetValueA(nwAdapters,subkeyName,"DeviceInstanceID",RRF_RT_ANY,&type,(PVOID)data,&dataLen) == ERROR_SUCCESS) { + data[dataLen] = '\0'; + printf("%s: %s\r\n",subkeyName,data); + } + } break; + } + } + + RegCloseKey(nwAdapters); } EthernetTap::~EthernetTap() -- cgit v1.2.3