diff options
| -rw-r--r-- | windns/src/windns/dnsreverter.cpp | 32 | ||||
| -rw-r--r-- | windns/src/windns/dnsreverter.h | 19 |
2 files changed, 51 insertions, 0 deletions
diff --git a/windns/src/windns/dnsreverter.cpp b/windns/src/windns/dnsreverter.cpp new file mode 100644 index 0000000000..12d15e7bbc --- /dev/null +++ b/windns/src/windns/dnsreverter.cpp @@ -0,0 +1,32 @@ +#include "stdafx.h" +#include "dnsreverter.h" +#include "wmi/methodcall.h" +#include <sstream> + +DnsReverter::DnsReverter(std::shared_ptr<ITraceSink> traceSink) + : m_traceSink(traceSink) +{ +} + +void DnsReverter::revert(wmi::IConnection &connection, const DnsConfig &config) +{ + XTRACE("Reverting DNS configuration for interface with index=", config.interfaceIndex()); + + std::wstringstream ss; + + ss << L"SELECT * FROM Win32_NetworkAdapterConfiguration " + << L"WHERE SettingID = '" << config.id() << L"'"; + + auto resultSet = connection.query(ss.str().c_str()); + + if (false == resultSet.advance()) + { + XTRACE("Unable to retrieve active configuration"); + return; + } + + auto activeConfig = resultSet.result(); + auto targetDns = config.servers(); + + nchelpers::SetDnsServers(connection, activeConfig, targetDns); +} diff --git a/windns/src/windns/dnsreverter.h b/windns/src/windns/dnsreverter.h new file mode 100644 index 0000000000..98de9caa8c --- /dev/null +++ b/windns/src/windns/dnsreverter.h @@ -0,0 +1,19 @@ +#pragma once + +#include "wmi/iconnection.h" +#include "dnsconfig.h" +#include "itracesink.h" +#include <memory> + +class DnsReverter +{ +public: + + DnsReverter(std::shared_ptr<ITraceSink> traceSink = std::make_shared<NullTraceSink>()); + + void revert(wmi::IConnection &connection, const DnsConfig &config); + +private: + + std::shared_ptr<ITraceSink> m_traceSink; +}; |
