aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--api/adapter.c67
-rw-r--r--api/api.vcxproj2
-rw-r--r--api/api.vcxproj.filters8
-rw-r--r--api/elevate.c248
-rw-r--r--api/elevate.h12
-rw-r--r--api/session.c1
-rw-r--r--driver/driver.vcxproj286
7 files changed, 158 insertions, 466 deletions
diff --git a/api/adapter.c b/api/adapter.c
index 963f17d..3c65bb2 100644
--- a/api/adapter.c
+++ b/api/adapter.c
@@ -20,7 +20,6 @@
#include <devpkey.h>
#include "adapter.h"
-#include "elevate.h"
#include "entry.h"
#include "logger.h"
#include "namespace.h"
@@ -1421,62 +1420,6 @@ static _Return_type_success_(return != NULL) WINTUN_ADAPTER *CreateAdapter(
if (!IsWindows10())
RequestedGUID = NULL;
- if (RequestedGUID)
- {
- WCHAR RegPath[MAX_REG_PATH];
- WCHAR RequestedGUIDStr[MAX_GUID_STRING_LEN];
- int GuidStrLen = StringFromGUID2(RequestedGUID, RequestedGUIDStr, _countof(RequestedGUIDStr)) * sizeof(WCHAR);
- if (_snwprintf_s(
- RegPath,
- MAX_REG_PATH,
- _TRUNCATE,
- L"SYSTEM\\CurrentControlSet\\Control\\Network\\{4D36E972-E325-11CE-BFC1-08002BE10318}\\%.*s\\Connection",
- GuidStrLen,
- RequestedGUIDStr) == -1)
- goto guidIsFresh;
- HKEY Key;
- if (RegOpenKeyExW(HKEY_LOCAL_MACHINE, RegPath, 0, KEY_QUERY_VALUE, &Key) != ERROR_SUCCESS)
- goto guidIsFresh;
- WCHAR *InstanceID = RegistryQueryString(Key, L"PnPInstanceId", FALSE);
- RegCloseKey(Key);
- if (!InstanceID)
- goto guidIsFresh;
- int Ret = _snwprintf_s(RegPath, MAX_REG_PATH, _TRUNCATE, L"SYSTEM\\CurrentControlSet\\Enum\\%s", InstanceID);
- Free(InstanceID);
- if (Ret == -1)
- goto guidIsFresh;
- if (RegOpenKeyExW(HKEY_LOCAL_MACHINE, RegPath, 0, KEY_QUERY_VALUE, &Key) == ERROR_SUCCESS)
- {
- RegCloseKey(Key);
- MIB_IF_ROW2 IfRow = { 0 };
- if (ConvertInterfaceGuidToLuid(RequestedGUID, &IfRow.InterfaceLuid) == NO_ERROR &&
- GetIfEntry2(&IfRow) == NO_ERROR && IfRow.OperStatus != IfOperStatusNotPresent)
- {
- SetLastError(
- LOG_ERROR(ERROR_ALREADY_EXISTS, L"Requested GUID is already in use: %s", RequestedGUIDStr));
- return NULL;
- }
- }
- LOG(WINTUN_LOG_WARN, L"Requested GUID %s has leftover residue", RequestedGUIDStr);
- HANDLE OriginalToken;
- if (!ImpersonateService(L"NetSetupSvc", &OriginalToken))
- {
- LOG_LAST_ERROR(L"Unable to impersonate NetSetupSvc");
- goto guidIsFresh; // non-fatal
- }
- if (_snwprintf_s(
- RegPath,
- MAX_REG_PATH,
- _TRUNCATE,
- L"SYSTEM\\CurrentControlSet\\Control\\NetworkSetup2\\Interfaces\\%.*s",
- GuidStrLen,
- RequestedGUIDStr) == -1 ||
- !RegistryDeleteKeyRecursive(HKEY_LOCAL_MACHINE, RegPath))
- LOG_LAST_ERROR(L"Unable to delete NetworkSetup2 registry key"); // non-fatal
- RestoreToken(OriginalToken);
- guidIsFresh:;
- }
-
HDEVINFO DevInfo = SetupDiCreateDeviceInfoListExW(&GUID_DEVCLASS_NET, NULL, NULL, NULL);
if (DevInfo == INVALID_HANDLE_VALUE)
{
@@ -1566,19 +1509,13 @@ static _Return_type_success_(return != NULL) WINTUN_ADAPTER *CreateAdapter(
}
if (RequestedGUID)
{
- WCHAR RequestedGUIDStr[MAX_GUID_STRING_LEN];
LastError = RegSetValueExW(
- NetDevRegKey,
- L"NetSetupAnticipatedInstanceId",
- 0,
- REG_SZ,
- (const BYTE *)RequestedGUIDStr,
- StringFromGUID2(RequestedGUID, RequestedGUIDStr, _countof(RequestedGUIDStr)) * sizeof(WCHAR));
+ NetDevRegKey, L"SuggestedInstanceId", 0, REG_BINARY, (const BYTE *)RequestedGUID, sizeof(*RequestedGUID));
if (LastError != ERROR_SUCCESS)
{
WCHAR RegPath[MAX_REG_PATH];
LoggerGetRegistryKeyPath(NetDevRegKey, RegPath);
- LOG_ERROR(LastError, L"Failed to set %.*s\\NetSetupAnticipatedInstanceId", MAX_REG_PATH, RegPath);
+ LOG_ERROR(LastError, L"Failed to set %.*s\\SuggestedInstanceId", MAX_REG_PATH, RegPath);
goto cleanupNetDevRegKey;
}
}
diff --git a/api/api.vcxproj b/api/api.vcxproj
index 5e7d462..79a9932 100644
--- a/api/api.vcxproj
+++ b/api/api.vcxproj
@@ -156,7 +156,6 @@
<ItemGroup>
<ClInclude Include="entry.h" />
<ClInclude Include="adapter.h" />
- <ClInclude Include="elevate.h" />
<ClInclude Include="rundll32_i.c">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClInclude>
@@ -171,7 +170,6 @@
<ItemGroup>
<ClCompile Include="entry.c" />
<ClCompile Include="adapter.c" />
- <ClCompile Include="elevate.c" />
<ClCompile Include="logger.c" />
<ClCompile Include="namespace.c" />
<ClCompile Include="registry.c" />
diff --git a/api/api.vcxproj.filters b/api/api.vcxproj.filters
index 682681e..05c580d 100644
--- a/api/api.vcxproj.filters
+++ b/api/api.vcxproj.filters
@@ -49,9 +49,6 @@
<ClInclude Include="wintun.h">
<Filter>Header Files</Filter>
</ClInclude>
- <ClInclude Include="elevate.h">
- <Filter>Header Files</Filter>
- </ClInclude>
<ClInclude Include="entry.h">
<Filter>Header Files</Filter>
</ClInclude>
@@ -84,11 +81,8 @@
<ClCompile Include="session.c">
<Filter>Source Files</Filter>
</ClCompile>
- <ClCompile Include="elevate.c">
- <Filter>Source Files</Filter>
- </ClCompile>
<ClCompile Include="entry.c">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
-</Project> \ No newline at end of file
+</Project>
diff --git a/api/elevate.c b/api/elevate.c
deleted file mode 100644
index 61cd7ee..0000000
--- a/api/elevate.c
+++ /dev/null
@@ -1,248 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0
- *
- * Copyright (C) 2018-2021 WireGuard LLC. All Rights Reserved.
- */
-
-#include "elevate.h"
-#include "logger.h"
-
-#include <Windows.h>
-#include <TlHelp32.h>
-
-static _Return_type_success_(return != FALSE) BOOL ElevateToSystem(void)
-{
- HANDLE CurrentProcessToken, ThreadToken, ProcessSnapshot, WinlogonProcess, WinlogonToken, DuplicatedToken;
- PROCESSENTRY32W ProcessEntry = { .dwSize = sizeof(PROCESSENTRY32W) };
- BOOL Ret;
- DWORD LastError = ERROR_SUCCESS;
- TOKEN_PRIVILEGES Privileges = { .PrivilegeCount = 1, .Privileges = { { .Attributes = SE_PRIVILEGE_ENABLED } } };
- CHAR LocalSystemSid[MAX_SID_SIZE];
- DWORD RequiredBytes = sizeof(LocalSystemSid);
- struct
- {
- TOKEN_USER MaybeLocalSystem;
- CHAR LargeEnoughForLocalSystem[MAX_SID_SIZE];
- } TokenUserBuffer;
-
- Ret = CreateWellKnownSid(WinLocalSystemSid, NULL, &LocalSystemSid, &RequiredBytes);
- if (!Ret)
- {
- LastError = LOG_LAST_ERROR(L"Failed to create SID");
- goto cleanup;
- }
- Ret = OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &CurrentProcessToken);
- if (!Ret)
- {
- LastError = LOG_LAST_ERROR(L"Failed to open process token");
- goto cleanup;
- }
- Ret =
- GetTokenInformation(CurrentProcessToken, TokenUser, &TokenUserBuffer, sizeof(TokenUserBuffer), &RequiredBytes);
- LastError = GetLastError();
- CloseHandle(CurrentProcessToken);
- if (!Ret)
- {
- LOG_ERROR(LastError, L"Failed to get token information");
- goto cleanup;
- }
- if (EqualSid(TokenUserBuffer.MaybeLocalSystem.User.Sid, LocalSystemSid))
- return ImpersonateSelf(SecurityImpersonation);
- Ret = LookupPrivilegeValueW(NULL, SE_DEBUG_NAME, &Privileges.Privileges[0].Luid);
- if (!Ret)
- {
- LastError = LOG_LAST_ERROR(L"Failed to lookup privilege value");
- goto cleanup;
- }
- ProcessSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
- if (ProcessSnapshot == INVALID_HANDLE_VALUE)
- {
- LastError = LOG_LAST_ERROR(L"Failed to create toolhelp snapshot");
- goto cleanup;
- }
- for (Ret = Process32FirstW(ProcessSnapshot, &ProcessEntry); Ret;
- Ret = Process32NextW(ProcessSnapshot, &ProcessEntry))
- {
- if (_wcsicmp(ProcessEntry.szExeFile, L"winlogon.exe"))
- continue;
- RevertToSelf();
- Ret = ImpersonateSelf(SecurityImpersonation);
- if (!Ret)
- {
- LastError = GetLastError();
- continue;
- }
- Ret = OpenThreadToken(GetCurrentThread(), TOKEN_ADJUST_PRIVILEGES, FALSE, &ThreadToken);
- if (!Ret)
- {
- LastError = GetLastError();
- continue;
- }
- Ret = AdjustTokenPrivileges(ThreadToken, FALSE, &Privileges, 0, NULL, NULL);
- LastError = GetLastError();
- CloseHandle(ThreadToken);
- if (!Ret)
- continue;
-
- WinlogonProcess = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, ProcessEntry.th32ProcessID);
- if (!WinlogonProcess)
- {
- LastError = GetLastError();
- continue;
- }
- Ret = OpenProcessToken(WinlogonProcess, TOKEN_IMPERSONATE | TOKEN_DUPLICATE, &WinlogonToken);
- LastError = GetLastError();
- CloseHandle(WinlogonProcess);
- if (!Ret)
- continue;
- Ret = DuplicateToken(WinlogonToken, SecurityImpersonation, &DuplicatedToken);
- LastError = GetLastError();
- CloseHandle(WinlogonToken);
- if (!Ret)
- continue;
- if (!GetTokenInformation(DuplicatedToken, TokenUser, &TokenUserBuffer, sizeof(TokenUserBuffer), &RequiredBytes))
- goto next;
- if (!EqualSid(TokenUserBuffer.MaybeLocalSystem.User.Sid, LocalSystemSid))
- {
- SetLastError(ERROR_ACCESS_DENIED);
- goto next;
- }
- if (!SetThreadToken(NULL, DuplicatedToken))
- goto next;
- CloseHandle(DuplicatedToken);
- CloseHandle(ProcessSnapshot);
- return TRUE;
- next:
- LastError = GetLastError();
- CloseHandle(DuplicatedToken);
- }
- RevertToSelf();
- CloseHandle(ProcessSnapshot);
-cleanup:
- SetLastError(LastError);
- return FALSE;
-}
-
-_Return_type_success_(return != FALSE) BOOL ImpersonateService(_In_z_ WCHAR *ServiceName, _In_ HANDLE *OriginalToken)
-{
- HANDLE ThreadToken, ServiceProcess, ServiceToken, DuplicatedToken;
- SC_HANDLE Scm, ServiceHandle;
- DWORD LastError = ERROR_SUCCESS;
- TOKEN_PRIVILEGES Privileges = { .PrivilegeCount = 1, .Privileges = { { .Attributes = SE_PRIVILEGE_ENABLED } } };
- SERVICE_STATUS_PROCESS ServiceStatus;
- DWORD RequiredBytes;
- BOOL Ret = FALSE;
-
- *OriginalToken = NULL;
- if (!OpenThreadToken(GetCurrentThread(), TOKEN_IMPERSONATE, FALSE, OriginalToken) &&
- GetLastError() != ERROR_NO_TOKEN)
- return FALSE;
-
- if (!ElevateToSystem())
- goto cleanup;
-
- if (!LookupPrivilegeValueW(NULL, SE_DEBUG_NAME, &Privileges.Privileges[0].Luid))
- {
- LastError = LOG_LAST_ERROR(L"Failed to lookup privilege value");
- goto cleanup;
- }
- if (!OpenThreadToken(GetCurrentThread(), TOKEN_ADJUST_PRIVILEGES, FALSE, &ThreadToken))
- {
- LastError = LOG_LAST_ERROR(L"Failed to open thread token");
- goto cleanup;
- }
- if (!AdjustTokenPrivileges(ThreadToken, FALSE, &Privileges, 0, NULL, NULL))
- {
- LastError = LOG_LAST_ERROR(L"Failed to enable SE_DEBUG_NAME");
- goto cleanupThreadToken;
- }
-
- Scm = OpenSCManagerW(NULL, NULL, SC_MANAGER_CONNECT);
- if (!Scm)
- {
- LastError = LOG_LAST_ERROR(L"Failed to open SCM");
- goto cleanupThreadToken;
- }
- ServiceHandle = OpenServiceW(Scm, ServiceName, SERVICE_START | SERVICE_QUERY_STATUS);
- if (!ServiceHandle)
- {
- LastError = LOG_LAST_ERROR(L"Failed to open service %s", ServiceName);
- goto cleanupScm;
- }
- if (!StartServiceW(ServiceHandle, 0, NULL) && GetLastError() != ERROR_SERVICE_ALREADY_RUNNING)
- {
- LastError = LOG_LAST_ERROR(L"Failed to start service %s", ServiceName);
- goto cleanupService;
- }
- for (int i = 0; i < 1000; ++i)
- {
- if (!QueryServiceStatusEx(
- ServiceHandle, SC_STATUS_PROCESS_INFO, (BYTE *)&ServiceStatus, sizeof(ServiceStatus), &RequiredBytes))
- {
- LastError = LOG_LAST_ERROR(L"Failed to query service %s", ServiceName);
- goto cleanupService;
- }
- if (ServiceStatus.dwProcessId)
- break;
-
- if (i != 999)
- Sleep(4);
- }
- ServiceProcess = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, ServiceStatus.dwProcessId);
- if (!ServiceProcess)
- {
- LastError = LOG_LAST_ERROR(L"Failed to open service %s process %u", ServiceName, ServiceStatus.dwProcessId);
- goto cleanupService;
- }
- if (!OpenProcessToken(ServiceProcess, TOKEN_IMPERSONATE | TOKEN_DUPLICATE, &ServiceToken))
- {
- LastError =
- LOG_LAST_ERROR(L"Failed to open token of service %s process %u", ServiceName, ServiceStatus.dwProcessId);
- goto cleanupServiceProcess;
- }
- if (!DuplicateToken(ServiceToken, SecurityImpersonation, &DuplicatedToken))
- {
- LastError = LOG_LAST_ERROR(
- L"Failed to duplicate token of service %s process %u", ServiceName, ServiceStatus.dwProcessId);
- goto cleanupServiceToken;
- }
- if (!SetThreadToken(NULL, DuplicatedToken))
- {
- LastError = LOG_LAST_ERROR(
- L"Failed to set thread token to service %s process %u token", ServiceName, ServiceStatus.dwProcessId);
- goto cleanupDuplicatedToken;
- }
- Ret = TRUE;
-
-cleanupDuplicatedToken:
- CloseHandle(DuplicatedToken);
-cleanupServiceToken:
- CloseHandle(ServiceToken);
-cleanupServiceProcess:
- CloseHandle(ServiceProcess);
-cleanupService:
- CloseServiceHandle(ServiceHandle);
-cleanupScm:
- CloseServiceHandle(Scm);
-cleanupThreadToken:
- CloseHandle(ThreadToken);
-cleanup:
- if (!Ret)
- {
- RestoreToken(*OriginalToken);
- *OriginalToken = NULL;
- }
- SetLastError(LastError);
- return Ret;
-}
-
-_Return_type_success_(return != FALSE) BOOL RestoreToken(_In_ HANDLE OriginalToken)
-{
- RevertToSelf();
- if (!OriginalToken)
- return TRUE;
- BOOL Ret = SetThreadToken(NULL, OriginalToken);
- DWORD LastError = Ret ? ERROR_SUCCESS : LOG_LAST_ERROR(L"Failed to restore original token");
- CloseHandle(OriginalToken);
- SetLastError(LastError);
- return Ret;
-}
diff --git a/api/elevate.h b/api/elevate.h
deleted file mode 100644
index 04367b4..0000000
--- a/api/elevate.h
+++ /dev/null
@@ -1,12 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0
- *
- * Copyright (C) 2018-2021 WireGuard LLC. All Rights Reserved.
- */
-
-#pragma once
-
-#include <Windows.h>
-
-_Return_type_success_(return != FALSE) BOOL ImpersonateService(_In_z_ WCHAR *ServiceName, _In_ HANDLE *OriginalToken);
-
-_Return_type_success_(return != FALSE) BOOL RestoreToken(_In_ HANDLE OriginalToken);
diff --git a/api/session.c b/api/session.c
index d266d5d..7c408d5 100644
--- a/api/session.c
+++ b/api/session.c
@@ -4,7 +4,6 @@
*/
#include "adapter.h"
-#include "elevate.h"
#include "entry.h"
#include "logger.h"
#include "wintun.h"
diff --git a/driver/driver.vcxproj b/driver/driver.vcxproj
index 4457db2..3705bff 100644
--- a/driver/driver.vcxproj
+++ b/driver/driver.vcxproj
@@ -1,131 +1,155 @@
-<?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|ARM">
- <Configuration>Debug</Configuration>
- <Platform>ARM</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Debug|ARM64">
- <Configuration>Debug</Configuration>
- <Platform>ARM64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Debug|Win32">
- <Configuration>Debug</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Debug|x64">
- <Configuration>Debug</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Release|ARM">
- <Configuration>Release</Configuration>
- <Platform>ARM</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Release|ARM64">
- <Configuration>Release</Configuration>
- <Platform>ARM64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Release|Win32">
- <Configuration>Release</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Release|x64">
- <Configuration>Release</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- </ItemGroup>
- <PropertyGroup Label="Globals">
- <ProjectGuid>{F7679B65-2FEC-469A-8BAC-B07BF4439422}</ProjectGuid>
- <RootNamespace>wintun</RootNamespace>
- <WindowsTargetPlatformVersion>$(LatestTargetPlatformVersion)</WindowsTargetPlatformVersion>
- <ProjectName>wintun</ProjectName>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
- <PropertyGroup Label="Configuration">
- <PlatformToolset>WindowsKernelModeDriver10.0</PlatformToolset>
- <ConfigurationType>Driver</ConfigurationType>
- <DriverType>WDM</DriverType>
- <SpectreMitigation>false</SpectreMitigation>
- <Inf2CatUseLocalTime>true</Inf2CatUseLocalTime>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)'=='Release'" Label="Configuration">
- <UseDebugLibraries>false</UseDebugLibraries>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)'=='Debug'" Label="Configuration">
- <UseDebugLibraries>true</UseDebugLibraries>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Platform)'=='Win32'" Label="Configuration">
- <TargetVersion>Windows7</TargetVersion>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Platform)'=='ARM'" Label="Configuration">
- <TargetVersion>Windows8</TargetVersion>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Platform)'=='x64'" Label="Configuration">
- <TargetVersion>Windows7</TargetVersion>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Platform)'=='ARM64'" Label="Configuration">
- <TargetVersion>Windows10</TargetVersion>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
- <ImportGroup Label="ExtensionSettings">
- </ImportGroup>
- <ImportGroup Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <Import Project="..\wintun.props" />
- <PropertyGroup Label="UserMacros" />
- <PropertyGroup>
- <_ProjectFileVersion>15.0.28127.55</_ProjectFileVersion>
- <IntDir>..\$(Configuration)\$(WintunPlatform)\$(ProjectName)-intermediate\</IntDir>
- <OutDir>..\$(ConfigurationName)\$(WintunPlatform)\</OutDir>
- <RunCodeAnalysis>true</RunCodeAnalysis>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)'=='Release'">
- <CodeAnalysisRuleSet>$(WDKContentRoot)CodeAnalysis\DriverMustFixRules.ruleset</CodeAnalysisRuleSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)'=='Debug'">
- <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
- </PropertyGroup>
- <ItemDefinitionGroup>
- <ClCompile>
- <PreprocessorDefinitions>NDIS_MINIPORT_DRIVER=1;NDIS620_MINIPORT=1;NDIS683_MINIPORT=1;NDIS_WDM=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <AdditionalOptions>/volatile:iso %(AdditionalOptions)</AdditionalOptions>
- <EnablePREfast>true</EnablePREfast>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDIS_MINIPORT_DRIVER=1;NDIS620_MINIPORT=1;NDIS683_MINIPORT=1;NDIS_WDM=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ndis.lib;wdmsec.lib;%(AdditionalDependencies)</AdditionalDependencies>
- </Link>
- <DriverSign>
- <FileDigestAlgorithm>sha256</FileDigestAlgorithm>
- </DriverSign>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)'=='Release'">
- <Inf>
- <TimeStamp>$(WintunVersion)</TimeStamp>
- </Inf>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)'=='Debug'">
- <Inf>
- <TimeStamp>*</TimeStamp>
- </Inf>
- </ItemDefinitionGroup>
- <ItemGroup>
- <ClCompile Include="wintun.c" />
- </ItemGroup>
- <ItemGroup>
- <ResourceCompile Include="wintun.rc" />
- </ItemGroup>
- <ItemGroup>
- <Inf Include="wintun.inf" />
- <FilesToPackage Include="$(TargetPath)" Condition="'$(ConfigurationType)'=='Driver' or '$(ConfigurationType)'=='DynamicLibrary'" />
- </ItemGroup>
- <ItemGroup>
- <ClInclude Include="undocumented.h" />
- </ItemGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
- <ImportGroup Label="ExtensionTargets" />
- <Import Project="..\wintun.vcxproj.user" Condition="exists('..\wintun.vcxproj.user')" />
-</Project>
+<?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|ARM">
+ <Configuration>Debug</Configuration>
+ <Platform>ARM</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|ARM64">
+ <Configuration>Debug</Configuration>
+ <Platform>ARM64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|ARM">
+ <Configuration>Release</Configuration>
+ <Platform>ARM</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|ARM64">
+ <Configuration>Release</Configuration>
+ <Platform>ARM64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{F7679B65-2FEC-469A-8BAC-B07BF4439422}</ProjectGuid>
+ <RootNamespace>wintun</RootNamespace>
+ <WindowsTargetPlatformVersion>$(LatestTargetPlatformVersion)</WindowsTargetPlatformVersion>
+ <ProjectName>wintun</ProjectName>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Label="Configuration">
+ <PlatformToolset>WindowsKernelModeDriver10.0</PlatformToolset>
+ <ConfigurationType>Driver</ConfigurationType>
+ <DriverType>WDM</DriverType>
+ <SpectreMitigation>false</SpectreMitigation>
+ <Inf2CatUseLocalTime>true</Inf2CatUseLocalTime>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)'=='Release'" Label="Configuration">
+ <UseDebugLibraries>false</UseDebugLibraries>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)'=='Debug'" Label="Configuration">
+ <UseDebugLibraries>true</UseDebugLibraries>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Platform)'=='Win32'" Label="Configuration">
+ <TargetVersion>Windows7</TargetVersion>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Platform)'=='ARM'" Label="Configuration">
+ <TargetVersion>Windows8</TargetVersion>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Platform)'=='x64'" Label="Configuration">
+ <TargetVersion>Windows7</TargetVersion>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Platform)'=='ARM64'" Label="Configuration">
+ <TargetVersion>Windows10</TargetVersion>
+ </PropertyGroup>
+ <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">
+ <Driver_SpectreMitigation>false</Driver_SpectreMitigation>
+ </PropertyGroup>
+ <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">
+ <Driver_SpectreMitigation>false</Driver_SpectreMitigation>
+ </PropertyGroup>
+ <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">
+ <Driver_SpectreMitigation>false</Driver_SpectreMitigation>
+ </PropertyGroup>
+ <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">
+ <Driver_SpectreMitigation>false</Driver_SpectreMitigation>
+ </PropertyGroup>
+ <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <Driver_SpectreMitigation>false</Driver_SpectreMitigation>
+ </PropertyGroup>
+ <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <Driver_SpectreMitigation>false</Driver_SpectreMitigation>
+ </PropertyGroup>
+ <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <Driver_SpectreMitigation>false</Driver_SpectreMitigation>
+ </PropertyGroup>
+ <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Driver_SpectreMitigation>false</Driver_SpectreMitigation>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <Import Project="..\wintun.props" />
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <_ProjectFileVersion>15.0.28127.55</_ProjectFileVersion>
+ <IntDir>..\$(Configuration)\$(WintunPlatform)\$(ProjectName)-intermediate\</IntDir>
+ <OutDir>..\$(ConfigurationName)\$(WintunPlatform)\</OutDir>
+ <RunCodeAnalysis>true</RunCodeAnalysis>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)'=='Release'">
+ <CodeAnalysisRuleSet>$(WDKContentRoot)CodeAnalysis\DriverMustFixRules.ruleset</CodeAnalysisRuleSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)'=='Debug'">
+ <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+ </PropertyGroup>
+ <ItemDefinitionGroup>
+ <ClCompile>
+ <PreprocessorDefinitions>NDIS_MINIPORT_DRIVER=1;NDIS620_MINIPORT=1;NDIS683_MINIPORT=1;NDIS_WDM=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalOptions>/volatile:iso %(AdditionalOptions)</AdditionalOptions>
+ <EnablePREfast>true</EnablePREfast>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>NDIS_MINIPORT_DRIVER=1;NDIS620_MINIPORT=1;NDIS683_MINIPORT=1;NDIS_WDM=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ResourceCompile>
+ <Link>
+ <AdditionalDependencies>ndis.lib;wdmsec.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ </Link>
+ <DriverSign>
+ <FileDigestAlgorithm>sha256</FileDigestAlgorithm>
+ </DriverSign>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)'=='Release'">
+ <Inf>
+ <TimeStamp>$(WintunVersion)</TimeStamp>
+ </Inf>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)'=='Debug'">
+ <Inf>
+ <TimeStamp>*</TimeStamp>
+ </Inf>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="wintun.c" />
+ </ItemGroup>
+ <ItemGroup>
+ <ResourceCompile Include="wintun.rc" />
+ </ItemGroup>
+ <ItemGroup>
+ <Inf Include="wintun.inf" />
+ <FilesToPackage Include="$(TargetPath)" Condition="'$(ConfigurationType)'=='Driver' or '$(ConfigurationType)'=='DynamicLibrary'" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="undocumented.h" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets" />
+ <Import Project="..\wintun.vcxproj.user" Condition="exists('..\wintun.vcxproj.user')" />
+</Project> \ No newline at end of file