Skip to content

Commit 970b0d5

Browse files
committed
Enhancement: Began refactoring, Added dll unit tester
1 parent 6dd768b commit 970b0d5

14 files changed

+339
-12
lines changed

ChromeDevExtWarningPatcher.sln

+16
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,11 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ChromeDevExtWarningPatcher"
1818
{BAA11244-ECA8-44B9-B976-B9BCDF37BF99} = {BAA11244-ECA8-44B9-B976-B9BCDF37BF99}
1919
EndProjectSection
2020
EndProject
21+
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ChromePatcherDllUnitTests", "ChromePatcherDllUnitTests\ChromePatcherDllUnitTests.vcxproj", "{B2952F58-32AA-4FDE-920E-C558448D77D4}"
22+
ProjectSection(ProjectDependencies) = postProject
23+
{BA6B041F-E0E9-45EC-86D8-BC5D1D864AE5} = {BA6B041F-E0E9-45EC-86D8-BC5D1D864AE5}
24+
EndProjectSection
25+
EndProject
2126
Global
2227
GlobalSection(SolutionConfigurationPlatforms) = preSolution
2328
Debug|Any CPU = Debug|Any CPU
@@ -76,6 +81,17 @@ Global
7681
{9F535953-6B7C-49B5-B0E4-B5C845ECEF47}.Release|x64.Build.0 = Release|Any CPU
7782
{9F535953-6B7C-49B5-B0E4-B5C845ECEF47}.Release|x86.ActiveCfg = Release|Any CPU
7883
{9F535953-6B7C-49B5-B0E4-B5C845ECEF47}.Release|x86.Build.0 = Release|Any CPU
84+
{B2952F58-32AA-4FDE-920E-C558448D77D4}.Debug|Any CPU.ActiveCfg = Debug|x64
85+
{B2952F58-32AA-4FDE-920E-C558448D77D4}.Debug|Any CPU.Build.0 = Debug|x64
86+
{B2952F58-32AA-4FDE-920E-C558448D77D4}.Debug|x64.ActiveCfg = Debug|x64
87+
{B2952F58-32AA-4FDE-920E-C558448D77D4}.Debug|x64.Build.0 = Debug|x64
88+
{B2952F58-32AA-4FDE-920E-C558448D77D4}.Debug|x86.ActiveCfg = Debug|Win32
89+
{B2952F58-32AA-4FDE-920E-C558448D77D4}.Debug|x86.Build.0 = Debug|Win32
90+
{B2952F58-32AA-4FDE-920E-C558448D77D4}.Release|Any CPU.ActiveCfg = Release|x64
91+
{B2952F58-32AA-4FDE-920E-C558448D77D4}.Release|x64.ActiveCfg = Release|x64
92+
{B2952F58-32AA-4FDE-920E-C558448D77D4}.Release|x64.Build.0 = Release|x64
93+
{B2952F58-32AA-4FDE-920E-C558448D77D4}.Release|x86.ActiveCfg = Release|Win32
94+
{B2952F58-32AA-4FDE-920E-C558448D77D4}.Release|x86.Build.0 = Release|Win32
7995
EndGlobalSection
8096
GlobalSection(SolutionProperties) = preSolution
8197
HideSolutionNode = FALSE

ChromePatcherDll/ChromePatcherDll.vcxproj

+2
Original file line numberDiff line numberDiff line change
@@ -175,12 +175,14 @@
175175
<ItemGroup>
176176
<ClCompile Include="dllmain.cpp" />
177177
<ClCompile Include="patches.cpp" />
178+
<ClCompile Include="simplepatternsearcher.cpp" />
178179
<ClCompile Include="threads.cpp" />
179180
</ItemGroup>
180181
<ItemGroup>
181182
<ClInclude Include="dllmain.hpp" />
182183
<ClInclude Include="patches.hpp" />
183184
<ClInclude Include="resource.h" />
185+
<ClInclude Include="simplepatternsearcher.hpp" />
184186
<ClInclude Include="stdafx.h" />
185187
<ClInclude Include="threads.hpp" />
186188
</ItemGroup>

ChromePatcherDll/ChromePatcherDll.vcxproj.filters

+6
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,9 @@
2424
<ClCompile Include="threads.cpp">
2525
<Filter>Quelldateien</Filter>
2626
</ClCompile>
27+
<ClCompile Include="simplepatternsearcher.cpp">
28+
<Filter>Quelldateien</Filter>
29+
</ClCompile>
2730
</ItemGroup>
2831
<ItemGroup>
2932
<ClInclude Include="patches.hpp">
@@ -41,6 +44,9 @@
4144
<ClInclude Include="dllmain.hpp">
4245
<Filter>Headerdateien</Filter>
4346
</ClInclude>
47+
<ClInclude Include="simplepatternsearcher.hpp">
48+
<Filter>Headerdateien</Filter>
49+
</ClInclude>
4450
</ItemGroup>
4551
<ItemGroup>
4652
<ResourceCompile Include="ChromePatcherDll.rc">

ChromePatcherDll/dllmain.hpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,5 @@
22

33
// Header file for the injector
44

5-
_declspec(dllexport) bool InstallWinHook();
6-
_declspec(dllexport) bool UnInstallWinHook();
5+
//_declspec(dllexport) bool InstallWinHook();
6+
//_declspec(dllexport) bool UnInstallWinHook();

ChromePatcherDll/patches.cpp

+21-6
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,23 @@
11
#include "stdafx.h"
22
#include "patches.hpp"
3+
#include "simplepatternsearcher.hpp"
34

45
#define ReadVar(variable) file.read(reinterpret_cast<char*>(&variable), sizeof(variable)); // Makes everything easier to read
56

67
namespace ChromePatch {
8+
std::ostream& operator<<(std::ostream& os, const Patch& patch) { // Write identifiable data to the output stream for debugging
9+
const PatchPattern& firstPattern = patch.patterns[0];
10+
11+
os << "First Pattern: " << std::hex;
12+
for (byte b : firstPattern.pattern) {
13+
os << std::setw(2) << std::setfill('0') << (int)b << " ";
14+
}
15+
16+
os << " with PatchByte " << static_cast<int>(patch.patchByte) << std::dec;
17+
return os;
18+
}
19+
20+
721
ReadPatchResult Patches::ReadPatchFile() {
822
static const unsigned int FILE_HEADER = 0xCE161D6E; // Magic values
923
static const unsigned int PATCH_HEADER = 0x8A7C5000;
@@ -29,7 +43,7 @@ namespace ChromePatch {
2943
}
3044

3145
std::wstring dllPath = MultibyteToWide(ReadString(file));
32-
if (dllPath.compare(chromeDllPath) != 0) {
46+
if (dllPath != chromeDllPath) {
3347
result.UsingWrongVersion = true;
3448
}
3549

@@ -84,7 +98,7 @@ namespace ChromePatch {
8498
Patch patch{ patterns, origByte, patchByte, offsets, newBytes, isSig > 0, sigOffset };
8599
patches.push_back(patch);
86100

87-
std::cout << "Loaded patch: " << patterns[0].pattern.size() << " " << (int)origByte << " " << (int)patchByte << " " << offsets[0] << std::endl;
101+
std::cout << "Loaded patch: " << patch << std::endl;
88102
}
89103

90104
file.close();
@@ -125,6 +139,9 @@ namespace ChromePatch {
125139
return _byteswap_ulong(integer); // Convert to Big Endian (for the magic values)
126140
}
127141

142+
143+
auto simpleSearcher = std::make_unique<SimplePatternSearcher>();
144+
128145
// TODO: Externalize this function in different implementations (traditional and with SIMD support) and add multithreading
129146
int Patches::ApplyPatches() {
130147
int successfulPatches = 0;
@@ -183,9 +200,7 @@ namespace ChromePatch {
183200
*patchByte = patch.patchByte;
184201
} else { // Write the newBytes array if it is filled instead
185202
const int newBytesSize = patch.newBytes.size();
186-
for(int newByteI = 0; newByteI < newBytesSize; newByteI++) {
187-
patchByte[newByteI] = patch.newBytes[newByteI];
188-
}
203+
memcpy_s(patchByte, newBytesSize, patch.newBytes.data(), newBytesSize);
189204

190205
std::cout << newBytesSize << " NewBytes have been written" << std::endl;
191206
}
@@ -228,7 +243,7 @@ namespace ChromePatch {
228243
END_PATCH_SEARCH_LABEL:
229244
for (Patch& patch : patches) {
230245
if (!patch.successfulPatch) {
231-
std::cerr << "Couldn't patch " << patch.patterns[0].pattern.size() << " " << patch.offsets[0] << std::endl;
246+
std::cerr << "Couldn't patch " << patch << std::endl;
232247
}
233248
else {
234249
successfulPatches++;

ChromePatcherDll/patches.hpp

+10-4
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ namespace ChromePatch {
1818
bool isSig{};
1919
int sigOffset{};
2020
bool finishedPatch{}, successfulPatch{};
21+
22+
friend std::ostream& operator<<(std::ostream& os, const Patch& patch);
2123
};
2224

2325
class Patches {
@@ -30,9 +32,13 @@ namespace ChromePatch {
3032
int ApplyPatches();
3133
private:
3234
std::wstring MultibyteToWide(const std::string& str);
33-
std::string ReadString(std::ifstream& stream);
34-
unsigned int ReadUInteger(std::ifstream& stream);
35+
std::string ReadString(std::ifstream& file);
36+
unsigned int ReadUInteger(std::ifstream& file);
3537
};
36-
3738
inline Patches patches;
38-
}
39+
40+
class PatternSearcher {
41+
public:
42+
virtual byte* SearchBytePattern(std::vector<Patch>& patchList, byte* startAddr, size_t length) = 0;
43+
};
44+
}
+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
#include "stdafx.h"
2+
#include "patches.hpp"
3+
#include "simplepatternsearcher.hpp"
4+
5+
namespace ChromePatch {
6+
byte* SimplePatternSearcher::SearchBytePattern(std::vector<Patch>& patchList, byte* startAddr, size_t length) {
7+
return nullptr;
8+
}
9+
10+
}
+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
#pragma once
2+
3+
namespace ChromePatch {
4+
class
5+
#ifdef _DEBUG
6+
__declspec(dllexport)
7+
#endif
8+
SimplePatternSearcher : PatternSearcher {
9+
public:
10+
byte* SearchBytePattern(std::vector<Patch>& patchList, byte* startAddr, size_t length) override;
11+
};
12+
}

ChromePatcherDll/stdafx.h

+1
Original file line numberDiff line numberDiff line change
@@ -9,5 +9,6 @@
99
#include <ctime>
1010
#include <TlHelp32.h>
1111
#include <thread>
12+
#include <iomanip>
1213

1314
inline HMODULE module;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,192 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
3+
<ItemGroup Label="ProjectConfigurations">
4+
<ProjectConfiguration Include="Debug|Win32">
5+
<Configuration>Debug</Configuration>
6+
<Platform>Win32</Platform>
7+
</ProjectConfiguration>
8+
<ProjectConfiguration Include="Release|Win32">
9+
<Configuration>Release</Configuration>
10+
<Platform>Win32</Platform>
11+
</ProjectConfiguration>
12+
<ProjectConfiguration Include="Debug|x64">
13+
<Configuration>Debug</Configuration>
14+
<Platform>x64</Platform>
15+
</ProjectConfiguration>
16+
<ProjectConfiguration Include="Release|x64">
17+
<Configuration>Release</Configuration>
18+
<Platform>x64</Platform>
19+
</ProjectConfiguration>
20+
</ItemGroup>
21+
<PropertyGroup Label="Globals">
22+
<VCProjectVersion>16.0</VCProjectVersion>
23+
<ProjectGuid>{B2952F58-32AA-4FDE-920E-C558448D77D4}</ProjectGuid>
24+
<Keyword>Win32Proj</Keyword>
25+
<RootNamespace>ChromePatcherDllUnitTests</RootNamespace>
26+
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
27+
<ProjectSubType>NativeUnitTestProject</ProjectSubType>
28+
</PropertyGroup>
29+
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
30+
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
31+
<ConfigurationType>DynamicLibrary</ConfigurationType>
32+
<UseDebugLibraries>true</UseDebugLibraries>
33+
<PlatformToolset>v142</PlatformToolset>
34+
<CharacterSet>Unicode</CharacterSet>
35+
<UseOfMfc>false</UseOfMfc>
36+
</PropertyGroup>
37+
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
38+
<ConfigurationType>DynamicLibrary</ConfigurationType>
39+
<UseDebugLibraries>false</UseDebugLibraries>
40+
<PlatformToolset>v142</PlatformToolset>
41+
<WholeProgramOptimization>true</WholeProgramOptimization>
42+
<CharacterSet>Unicode</CharacterSet>
43+
<UseOfMfc>false</UseOfMfc>
44+
</PropertyGroup>
45+
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
46+
<ConfigurationType>DynamicLibrary</ConfigurationType>
47+
<UseDebugLibraries>true</UseDebugLibraries>
48+
<PlatformToolset>v142</PlatformToolset>
49+
<CharacterSet>Unicode</CharacterSet>
50+
<UseOfMfc>false</UseOfMfc>
51+
</PropertyGroup>
52+
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
53+
<ConfigurationType>DynamicLibrary</ConfigurationType>
54+
<UseDebugLibraries>false</UseDebugLibraries>
55+
<PlatformToolset>v142</PlatformToolset>
56+
<WholeProgramOptimization>true</WholeProgramOptimization>
57+
<CharacterSet>Unicode</CharacterSet>
58+
<UseOfMfc>false</UseOfMfc>
59+
</PropertyGroup>
60+
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
61+
<ImportGroup Label="ExtensionSettings">
62+
</ImportGroup>
63+
<ImportGroup Label="Shared">
64+
</ImportGroup>
65+
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
66+
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
67+
</ImportGroup>
68+
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
69+
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
70+
</ImportGroup>
71+
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
72+
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
73+
</ImportGroup>
74+
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
75+
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
76+
</ImportGroup>
77+
<PropertyGroup Label="UserMacros" />
78+
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
79+
<LinkIncremental>true</LinkIncremental>
80+
</PropertyGroup>
81+
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
82+
<LinkIncremental>true</LinkIncremental>
83+
</PropertyGroup>
84+
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
85+
<LinkIncremental>false</LinkIncremental>
86+
</PropertyGroup>
87+
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
88+
<LinkIncremental>false</LinkIncremental>
89+
</PropertyGroup>
90+
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
91+
<ClCompile>
92+
<PrecompiledHeader>Use</PrecompiledHeader>
93+
<WarningLevel>Level3</WarningLevel>
94+
<SDLCheck>true</SDLCheck>
95+
<AdditionalIncludeDirectories>$(ProjectDir)..\ChromePatcherDll\;$(VCInstallDir)UnitTest\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
96+
<PreprocessorDefinitions>WIN32;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
97+
<UseFullPaths>true</UseFullPaths>
98+
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
99+
<LanguageStandard_C>Default</LanguageStandard_C>
100+
<LanguageStandard>stdcpp17</LanguageStandard>
101+
</ClCompile>
102+
<Link>
103+
<SubSystem>Windows</SubSystem>
104+
<AdditionalLibraryDirectories>$(VCInstallDir)UnitTest\lib;$(ProjectDir)..\ChromePatcherDll\x64\Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
105+
<AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>
106+
</Link>
107+
</ItemDefinitionGroup>
108+
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
109+
<ClCompile>
110+
<PrecompiledHeader>Use</PrecompiledHeader>
111+
<WarningLevel>Level3</WarningLevel>
112+
<SDLCheck>true</SDLCheck>
113+
<AdditionalIncludeDirectories>$(ProjectDir)..\ChromePatcherDll\;$(VCInstallDir)UnitTest\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
114+
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
115+
<UseFullPaths>true</UseFullPaths>
116+
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
117+
<LanguageStandard_C>Default</LanguageStandard_C>
118+
<LanguageStandard>stdcpp17</LanguageStandard>
119+
</ClCompile>
120+
<Link>
121+
<SubSystem>Windows</SubSystem>
122+
<AdditionalLibraryDirectories>$(VCInstallDir)UnitTest\lib;$(ProjectDir)..\ChromePatcherDll\x64\Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
123+
<AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>
124+
</Link>
125+
</ItemDefinitionGroup>
126+
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
127+
<ClCompile>
128+
<PrecompiledHeader>Use</PrecompiledHeader>
129+
<WarningLevel>Level3</WarningLevel>
130+
<FunctionLevelLinking>true</FunctionLevelLinking>
131+
<IntrinsicFunctions>true</IntrinsicFunctions>
132+
<SDLCheck>true</SDLCheck>
133+
<AdditionalIncludeDirectories>$(ProjectDir)..\ChromePatcherDll\;$(VCInstallDir)UnitTest\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
134+
<PreprocessorDefinitions>WIN32;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
135+
<UseFullPaths>true</UseFullPaths>
136+
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
137+
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
138+
<LanguageStandard_C>Default</LanguageStandard_C>
139+
<LanguageStandard>stdcpp17</LanguageStandard>
140+
</ClCompile>
141+
<Link>
142+
<SubSystem>Windows</SubSystem>
143+
<EnableCOMDATFolding>true</EnableCOMDATFolding>
144+
<OptimizeReferences>true</OptimizeReferences>
145+
<AdditionalLibraryDirectories>$(VCInstallDir)UnitTest\lib;$(ProjectDir)..\ChromePatcherDll\x64\Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
146+
<AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>
147+
</Link>
148+
</ItemDefinitionGroup>
149+
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
150+
<ClCompile>
151+
<PrecompiledHeader>Use</PrecompiledHeader>
152+
<WarningLevel>Level3</WarningLevel>
153+
<FunctionLevelLinking>true</FunctionLevelLinking>
154+
<IntrinsicFunctions>true</IntrinsicFunctions>
155+
<SDLCheck>true</SDLCheck>
156+
<AdditionalIncludeDirectories>$(ProjectDir)..\ChromePatcherDll\;$(VCInstallDir)UnitTest\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
157+
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
158+
<UseFullPaths>true</UseFullPaths>
159+
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
160+
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
161+
<LanguageStandard_C>Default</LanguageStandard_C>
162+
<LanguageStandard>stdcpp17</LanguageStandard>
163+
</ClCompile>
164+
<Link>
165+
<SubSystem>Windows</SubSystem>
166+
<EnableCOMDATFolding>true</EnableCOMDATFolding>
167+
<OptimizeReferences>true</OptimizeReferences>
168+
<AdditionalLibraryDirectories>$(VCInstallDir)UnitTest\lib;$(ProjectDir)..\ChromePatcherDll\x64\Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
169+
<AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>
170+
</Link>
171+
</ItemDefinitionGroup>
172+
<ItemGroup>
173+
<ClCompile Include="patterntests.cpp" />
174+
<ClCompile Include="pch.cpp">
175+
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
176+
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader>
177+
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
178+
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader>
179+
</ClCompile>
180+
</ItemGroup>
181+
<ItemGroup>
182+
<ClInclude Include="pch.h" />
183+
</ItemGroup>
184+
<ItemGroup>
185+
<ProjectReference Include="..\ChromePatcherDll\ChromePatcherDll.vcxproj">
186+
<Project>{ba6b041f-e0e9-45ec-86d8-bc5d1d864ae5}</Project>
187+
</ProjectReference>
188+
</ItemGroup>
189+
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
190+
<ImportGroup Label="ExtensionTargets">
191+
</ImportGroup>
192+
</Project>

0 commit comments

Comments
 (0)