summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--windns/src/windns/dnsreverter.cpp32
-rw-r--r--windns/src/windns/dnsreverter.h19
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;
+};