summaryrefslogtreecommitdiffhomepage
path: root/windows
diff options
context:
space:
mode:
authorOdd Stranne <odd@mullvad.net>2018-10-01 22:51:26 +0200
committerOdd Stranne <odd@mullvad.net>2018-10-03 23:13:56 +0200
commit74e4492f4607d19594034b1bcd202fbcefc1175c (patch)
tree2d03d4a3cb6f8fea7bdd9a75541ad6ce81780ba5 /windows
parent3291c2c839aea203686737c12cd0bd22a0dd20f6 (diff)
downloadmullvadvpn-74e4492f4607d19594034b1bcd202fbcefc1175c.tar.xz
mullvadvpn-74e4492f4607d19594034b1bcd202fbcefc1175c.zip
Add 'verifier' tool for snapshotting and comparing DNS configurations
Diffstat (limited to 'windows')
-rw-r--r--windows/windns/extras.sln13
-rw-r--r--windows/windns/src/extras/verifier/stdafx.cppbin0 -> 592 bytes
-rw-r--r--windows/windns/src/extras/verifier/stdafx.hbin0 -> 642 bytes
-rw-r--r--windows/windns/src/extras/verifier/targetver.hbin0 -> 630 bytes
-rw-r--r--windows/windns/src/extras/verifier/verifier.cpp163
-rw-r--r--windows/windns/src/extras/verifier/verifier.vcxproj190
-rw-r--r--windows/windns/src/extras/verifier/verifier.vcxproj.filters22
7 files changed, 388 insertions, 0 deletions
diff --git a/windows/windns/extras.sln b/windows/windns/extras.sln
index ca9347638e..36b98f06c1 100644
--- a/windows/windns/extras.sln
+++ b/windows/windns/extras.sln
@@ -15,6 +15,11 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "windns", "src\windns\windns
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libcommon", "..\windows-libraries\src\libcommon\libcommon.vcxproj", "{B52E2D10-A94A-4605-914A-2DCEF6A757EF}"
EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "verifier", "src\extras\verifier\verifier.vcxproj", "{1A035E4B-3C83-4AD0-AB13-D19FB5FC9428}"
+ ProjectSection(ProjectDependencies) = postProject
+ {B52E2D10-A94A-4605-914A-2DCEF6A757EF} = {B52E2D10-A94A-4605-914A-2DCEF6A757EF}
+ EndProjectSection
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|x64 = Debug|x64
@@ -47,6 +52,14 @@ Global
{B52E2D10-A94A-4605-914A-2DCEF6A757EF}.Release|x64.Build.0 = Release|x64
{B52E2D10-A94A-4605-914A-2DCEF6A757EF}.Release|x86.ActiveCfg = Release|Win32
{B52E2D10-A94A-4605-914A-2DCEF6A757EF}.Release|x86.Build.0 = Release|Win32
+ {1A035E4B-3C83-4AD0-AB13-D19FB5FC9428}.Debug|x64.ActiveCfg = Debug|x64
+ {1A035E4B-3C83-4AD0-AB13-D19FB5FC9428}.Debug|x64.Build.0 = Debug|x64
+ {1A035E4B-3C83-4AD0-AB13-D19FB5FC9428}.Debug|x86.ActiveCfg = Debug|Win32
+ {1A035E4B-3C83-4AD0-AB13-D19FB5FC9428}.Debug|x86.Build.0 = Debug|Win32
+ {1A035E4B-3C83-4AD0-AB13-D19FB5FC9428}.Release|x64.ActiveCfg = Release|x64
+ {1A035E4B-3C83-4AD0-AB13-D19FB5FC9428}.Release|x64.Build.0 = Release|x64
+ {1A035E4B-3C83-4AD0-AB13-D19FB5FC9428}.Release|x86.ActiveCfg = Release|Win32
+ {1A035E4B-3C83-4AD0-AB13-D19FB5FC9428}.Release|x86.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/windows/windns/src/extras/verifier/stdafx.cpp b/windows/windns/src/extras/verifier/stdafx.cpp
new file mode 100644
index 0000000000..41d5cbabaa
--- /dev/null
+++ b/windows/windns/src/extras/verifier/stdafx.cpp
Binary files differ
diff --git a/windows/windns/src/extras/verifier/stdafx.h b/windows/windns/src/extras/verifier/stdafx.h
new file mode 100644
index 0000000000..94d4ed877d
--- /dev/null
+++ b/windows/windns/src/extras/verifier/stdafx.h
Binary files differ
diff --git a/windows/windns/src/extras/verifier/targetver.h b/windows/windns/src/extras/verifier/targetver.h
new file mode 100644
index 0000000000..567cd346ef
--- /dev/null
+++ b/windows/windns/src/extras/verifier/targetver.h
Binary files differ
diff --git a/windows/windns/src/extras/verifier/verifier.cpp b/windows/windns/src/extras/verifier/verifier.cpp
new file mode 100644
index 0000000000..c7404a7060
--- /dev/null
+++ b/windows/windns/src/extras/verifier/verifier.cpp
@@ -0,0 +1,163 @@
+#include "stdafx.h"
+
+#include <libcommon/registry/registry.h>
+
+#include <vector>
+#include <string>
+#include <iostream>
+#include <algorithm>
+
+// Use source files directly from windns.
+#include "../../windns/interfacesnap.h"
+#include "../../windns/registrypaths.h"
+#include "../../windns/types.h"
+
+struct InterfaceData
+{
+ InterfaceData(const std::wstring &_interfaceGuid, InterfaceSnap _snap)
+ : interfaceGuid(_interfaceGuid)
+ , snap(_snap)
+ {
+ }
+
+ std::wstring interfaceGuid;
+ InterfaceSnap snap;
+};
+
+std::vector<std::wstring> DiscoverInterfaces(Protocol protocol)
+{
+ auto regKey = common::registry::Registry::OpenKey(HKEY_LOCAL_MACHINE, RegistryPaths::InterfaceRoot(protocol));
+
+ std::vector<std::wstring> interfaces;
+
+ interfaces.reserve(20);
+
+ regKey->enumerateSubKeys([&interfaces](const std::wstring &keyName)
+ {
+ interfaces.push_back(keyName);
+ return true;
+ });
+
+ return interfaces;
+}
+
+std::vector<InterfaceData> CreateInterfaceRecords(Protocol protocol, const std::vector<std::wstring> &interfaces)
+{
+ std::vector<InterfaceData> records;
+
+ records.reserve(interfaces.size());
+
+ for (const auto &iface : interfaces)
+ {
+ records.emplace_back(iface, InterfaceSnap(protocol, iface));
+ }
+
+ return records;
+}
+
+void CreateSnapshots(std::vector<InterfaceData> &v4, std::vector<InterfaceData> &v6)
+{
+ v4 = CreateInterfaceRecords(Protocol::IPv4, DiscoverInterfaces(Protocol::IPv4));
+ v6 = CreateInterfaceRecords(Protocol::IPv6, DiscoverInterfaces(Protocol::IPv6));
+}
+
+void VerifyProtocolSnapshots(const std::vector<InterfaceData> &first, const std::vector<InterfaceData> &second)
+{
+ for (const auto &firstRecord : first)
+ {
+ const auto interfaceGuid = firstRecord.interfaceGuid;
+
+ auto secondRecord = std::find_if(second.begin(), second.end(), [&interfaceGuid](const InterfaceData &candidate)
+ {
+ return interfaceGuid == candidate.interfaceGuid;
+ });
+
+ if (second.end() == secondRecord)
+ {
+ std::wcout << L"Interface " << interfaceGuid << L" has been removed from the system" << std::endl;
+ continue;
+ }
+
+ const auto serversBefore = firstRecord.snap.nameServers();
+ const auto serversAfter = secondRecord->snap.nameServers();
+
+ if (serversBefore == serversAfter)
+ {
+ continue;
+ }
+
+ std::wcout << L"Interface " << interfaceGuid << L" has been updated" << std::endl;
+ std::wcout << L"before:" << std::endl;
+
+ for (const auto &server : serversBefore)
+ {
+ std::wcout << L" " << server << std::endl;
+ }
+
+ std::wcout << L"after:" << std::endl;
+
+ for (const auto &server : serversAfter)
+ {
+ std::wcout << L" " << server << std::endl;
+ }
+ }
+}
+
+void VerifySnapshots(const std::vector<InterfaceData> &v4, const std::vector<InterfaceData> &v6)
+{
+ std::vector<InterfaceData> updatedV4, updatedV6;
+
+ CreateSnapshots(updatedV4, updatedV6);
+
+ VerifyProtocolSnapshots(v4, updatedV4);
+ VerifyProtocolSnapshots(v6, updatedV6);
+}
+
+int main()
+{
+ std::vector<InterfaceData> v4records, v6records;
+
+ for (;;)
+ {
+ std::wcout << L"(T)ake interface settings snapshot" << std::endl
+ << L"(C)ompare current settings to snapshot" << std::endl
+ << L"(Q)uit" << std::endl;
+
+ std::wcout << L"?: ";
+
+ auto answer = _getwch();
+
+ std::wcout << std::endl;
+
+ //
+ // Branch on selected command.
+ //
+
+ if ('t' == towlower(answer))
+ {
+ CreateSnapshots(v4records, v6records);
+
+ std::wcout << L"Created new snapshot" << std::endl;
+
+ continue;
+ }
+
+ if ('c' == towlower(answer))
+ {
+ VerifySnapshots(v4records, v6records);
+
+ std::wcout << L"Comparison completed" << std::endl;
+
+ continue;
+ }
+
+ if ('q' == towlower(answer))
+ {
+ break;
+ }
+
+ std::wcout << L"Unrecognized option" << std::endl;
+ }
+
+ return 0;
+}
diff --git a/windows/windns/src/extras/verifier/verifier.vcxproj b/windows/windns/src/extras/verifier/verifier.vcxproj
new file mode 100644
index 0000000000..f0342db79c
--- /dev/null
+++ b/windows/windns/src/extras/verifier/verifier.vcxproj
@@ -0,0 +1,190 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\windns\interfacesnap.cpp" />
+ <ClCompile Include="..\..\windns\registrypaths.cpp" />
+ <ClCompile Include="stdafx.cpp" />
+ <ClCompile Include="verifier.cpp" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="stdafx.h" />
+ <ClInclude Include="targetver.h" />
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <VCProjectVersion>15.0</VCProjectVersion>
+ <ProjectGuid>{1A035E4B-3C83-4AD0-AB13-D19FB5FC9428}</ProjectGuid>
+ <Keyword>Win32Proj</Keyword>
+ <RootNamespace>verifier</RootNamespace>
+ <WindowsTargetPlatformVersion>10.0.16299.0</WindowsTargetPlatformVersion>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <PlatformToolset>v141</PlatformToolset>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <PlatformToolset>v141</PlatformToolset>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <PlatformToolset>v141</PlatformToolset>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <PlatformToolset>v141</PlatformToolset>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Label="Shared">
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <LinkIncremental>true</LinkIncremental>
+ <OutDir>$(SolutionDir)bin\$(Platform)-$(Configuration)\</OutDir>
+ <IntDir>$(SolutionDir)bin\temp\$(Platform)-$(Configuration)\$(ProjectName)\</IntDir>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <LinkIncremental>true</LinkIncremental>
+ <OutDir>$(SolutionDir)bin\$(Platform)-$(Configuration)\</OutDir>
+ <IntDir>$(SolutionDir)bin\temp\$(Platform)-$(Configuration)\$(ProjectName)\</IntDir>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <LinkIncremental>false</LinkIncremental>
+ <OutDir>$(SolutionDir)bin\$(Platform)-$(Configuration)\</OutDir>
+ <IntDir>$(SolutionDir)bin\temp\$(Platform)-$(Configuration)\$(ProjectName)\</IntDir>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <LinkIncremental>false</LinkIncremental>
+ <OutDir>$(SolutionDir)bin\$(Platform)-$(Configuration)\</OutDir>
+ <IntDir>$(SolutionDir)bin\temp\$(Platform)-$(Configuration)\$(ProjectName)\</IntDir>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <ClCompile>
+ <PrecompiledHeader>Create</PrecompiledHeader>
+ <WarningLevel>Level4</WarningLevel>
+ <Optimization>Disabled</Optimization>
+ <SDLCheck>true</SDLCheck>
+ <PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <ConformanceMode>true</ConformanceMode>
+ <AdditionalIncludeDirectories>$(ProjectDir)../../../../windows-libraries/src/</AdditionalIncludeDirectories>
+ <LanguageStandard>stdcpplatest</LanguageStandard>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <AdditionalDependencies>libcommon.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <AdditionalLibraryDirectories>$(SolutionDir)bin\$(Platform)-$(Configuration)\</AdditionalLibraryDirectories>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <PrecompiledHeader>Create</PrecompiledHeader>
+ <WarningLevel>Level4</WarningLevel>
+ <Optimization>Disabled</Optimization>
+ <SDLCheck>true</SDLCheck>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <ConformanceMode>true</ConformanceMode>
+ <AdditionalIncludeDirectories>$(ProjectDir)../../../../windows-libraries/src/</AdditionalIncludeDirectories>
+ <LanguageStandard>stdcpplatest</LanguageStandard>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <AdditionalDependencies>libcommon.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <AdditionalLibraryDirectories>$(SolutionDir)bin\$(Platform)-$(Configuration)\</AdditionalLibraryDirectories>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <PrecompiledHeader>Create</PrecompiledHeader>
+ <WarningLevel>Level4</WarningLevel>
+ <Optimization>MaxSpeed</Optimization>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <SDLCheck>true</SDLCheck>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <ConformanceMode>true</ConformanceMode>
+ <AdditionalIncludeDirectories>$(ProjectDir)../../../../windows-libraries/src/</AdditionalIncludeDirectories>
+ <LanguageStandard>stdcpplatest</LanguageStandard>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <OptimizeReferences>true</OptimizeReferences>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <AdditionalDependencies>libcommon.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <AdditionalLibraryDirectories>$(SolutionDir)bin\$(Platform)-$(Configuration)\</AdditionalLibraryDirectories>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ClCompile>
+ <PrecompiledHeader>Create</PrecompiledHeader>
+ <WarningLevel>Level4</WarningLevel>
+ <Optimization>MaxSpeed</Optimization>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <SDLCheck>true</SDLCheck>
+ <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <ConformanceMode>true</ConformanceMode>
+ <AdditionalIncludeDirectories>$(ProjectDir)../../../../windows-libraries/src/</AdditionalIncludeDirectories>
+ <LanguageStandard>stdcpplatest</LanguageStandard>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <OptimizeReferences>true</OptimizeReferences>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <AdditionalDependencies>libcommon.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <AdditionalLibraryDirectories>$(SolutionDir)bin\$(Platform)-$(Configuration)\</AdditionalLibraryDirectories>
+ </Link>
+ </ItemDefinitionGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/windows/windns/src/extras/verifier/verifier.vcxproj.filters b/windows/windns/src/extras/verifier/verifier.vcxproj.filters
new file mode 100644
index 0000000000..f5d6b7adfc
--- /dev/null
+++ b/windows/windns/src/extras/verifier/verifier.vcxproj.filters
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <ClCompile Include="stdafx.cpp" />
+ <ClCompile Include="verifier.cpp" />
+ <ClCompile Include="..\..\windns\interfacesnap.cpp">
+ <Filter>borrowed</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\windns\registrypaths.cpp">
+ <Filter>borrowed</Filter>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="stdafx.h" />
+ <ClInclude Include="targetver.h" />
+ </ItemGroup>
+ <ItemGroup>
+ <Filter Include="borrowed">
+ <UniqueIdentifier>{2950faf7-32b2-4f62-9470-974c71724d40}</UniqueIdentifier>
+ </Filter>
+ </ItemGroup>
+</Project> \ No newline at end of file