diff --git a/InjectAppUserModelId/InjectAppUserModelId.vcxproj b/InjectAppUserModelId/InjectAppUserModelId.vcxproj new file mode 100644 index 0000000..672b2c7 --- /dev/null +++ b/InjectAppUserModelId/InjectAppUserModelId.vcxproj @@ -0,0 +1,173 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + 16.0 + {AF8B71B3-88B6-4DDA-8442-192079D160DE} + Win32Proj + InjectAppUserModelId + 10.0 + + + + DynamicLibrary + true + v142 + Unicode + + + DynamicLibrary + false + v142 + true + Unicode + + + DynamicLibrary + true + v142 + Unicode + + + DynamicLibrary + false + v142 + true + Unicode + + + + + + + + + + + + + + + + + + + + + true + $(ProjectName)_x64 + + + true + $(ProjectName)_x86 + + + false + $(ProjectName)_x86 + + + false + $(ProjectName)_x64 + + + + Use + Level3 + true + _DEBUG;INJECTAPPUSERMODELID_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + true + pch.h + + + Windows + true + false + + + + + Use + Level3 + true + WIN32;_DEBUG;INJECTAPPUSERMODELID_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + true + pch.h + + + Windows + true + false + + + + + Use + Level3 + true + true + true + WIN32;NDEBUG;INJECTAPPUSERMODELID_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + true + pch.h + + + Windows + true + true + true + false + + + + + Use + Level3 + true + true + true + NDEBUG;INJECTAPPUSERMODELID_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + true + pch.h + + + Windows + true + true + true + false + + + + + + + + + + Create + Create + Create + Create + + + + + + \ No newline at end of file diff --git a/InjectAppUserModelId/InjectAppUserModelId.vcxproj b/InjectAppUserModelId/InjectAppUserModelId.vcxproj new file mode 100644 index 0000000..672b2c7 --- /dev/null +++ b/InjectAppUserModelId/InjectAppUserModelId.vcxproj @@ -0,0 +1,173 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + 16.0 + {AF8B71B3-88B6-4DDA-8442-192079D160DE} + Win32Proj + InjectAppUserModelId + 10.0 + + + + DynamicLibrary + true + v142 + Unicode + + + DynamicLibrary + false + v142 + true + Unicode + + + DynamicLibrary + true + v142 + Unicode + + + DynamicLibrary + false + v142 + true + Unicode + + + + + + + + + + + + + + + + + + + + + true + $(ProjectName)_x64 + + + true + $(ProjectName)_x86 + + + false + $(ProjectName)_x86 + + + false + $(ProjectName)_x64 + + + + Use + Level3 + true + _DEBUG;INJECTAPPUSERMODELID_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + true + pch.h + + + Windows + true + false + + + + + Use + Level3 + true + WIN32;_DEBUG;INJECTAPPUSERMODELID_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + true + pch.h + + + Windows + true + false + + + + + Use + Level3 + true + true + true + WIN32;NDEBUG;INJECTAPPUSERMODELID_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + true + pch.h + + + Windows + true + true + true + false + + + + + Use + Level3 + true + true + true + NDEBUG;INJECTAPPUSERMODELID_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + true + pch.h + + + Windows + true + true + true + false + + + + + + + + + + Create + Create + Create + Create + + + + + + \ No newline at end of file diff --git a/InjectAppUserModelId/InjectAppUserModelId.vcxproj.filters b/InjectAppUserModelId/InjectAppUserModelId.vcxproj.filters new file mode 100644 index 0000000..b558337 --- /dev/null +++ b/InjectAppUserModelId/InjectAppUserModelId.vcxproj.filters @@ -0,0 +1,33 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;c++;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Header Files + + + Header Files + + + + + Source Files + + + Source Files + + + \ No newline at end of file diff --git a/InjectAppUserModelId/InjectAppUserModelId.vcxproj b/InjectAppUserModelId/InjectAppUserModelId.vcxproj new file mode 100644 index 0000000..672b2c7 --- /dev/null +++ b/InjectAppUserModelId/InjectAppUserModelId.vcxproj @@ -0,0 +1,173 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + 16.0 + {AF8B71B3-88B6-4DDA-8442-192079D160DE} + Win32Proj + InjectAppUserModelId + 10.0 + + + + DynamicLibrary + true + v142 + Unicode + + + DynamicLibrary + false + v142 + true + Unicode + + + DynamicLibrary + true + v142 + Unicode + + + DynamicLibrary + false + v142 + true + Unicode + + + + + + + + + + + + + + + + + + + + + true + $(ProjectName)_x64 + + + true + $(ProjectName)_x86 + + + false + $(ProjectName)_x86 + + + false + $(ProjectName)_x64 + + + + Use + Level3 + true + _DEBUG;INJECTAPPUSERMODELID_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + true + pch.h + + + Windows + true + false + + + + + Use + Level3 + true + WIN32;_DEBUG;INJECTAPPUSERMODELID_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + true + pch.h + + + Windows + true + false + + + + + Use + Level3 + true + true + true + WIN32;NDEBUG;INJECTAPPUSERMODELID_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + true + pch.h + + + Windows + true + true + true + false + + + + + Use + Level3 + true + true + true + NDEBUG;INJECTAPPUSERMODELID_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + true + pch.h + + + Windows + true + true + true + false + + + + + + + + + + Create + Create + Create + Create + + + + + + \ No newline at end of file diff --git a/InjectAppUserModelId/InjectAppUserModelId.vcxproj.filters b/InjectAppUserModelId/InjectAppUserModelId.vcxproj.filters new file mode 100644 index 0000000..b558337 --- /dev/null +++ b/InjectAppUserModelId/InjectAppUserModelId.vcxproj.filters @@ -0,0 +1,33 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;c++;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Header Files + + + Header Files + + + + + Source Files + + + Source Files + + + \ No newline at end of file diff --git a/InjectAppUserModelId/dllmain.cpp b/InjectAppUserModelId/dllmain.cpp new file mode 100644 index 0000000..b37440c --- /dev/null +++ b/InjectAppUserModelId/dllmain.cpp @@ -0,0 +1,35 @@ +// dllmain.cpp : Defines the entry point for the DLL application. +#include "pch.h" +#include +#include + +HMODULE us; + +BOOL APIENTRY DllMain( HMODULE hModule, + DWORD ul_reason_for_call, + LPVOID lpReserved + ) +{ + us = hModule; + switch (ul_reason_for_call) + { + case DLL_PROCESS_ATTACH: + case DLL_THREAD_ATTACH: + case DLL_THREAD_DETACH: + case DLL_PROCESS_DETACH: + break; + } + return TRUE; +} + +extern "C" +{ + __declspec(dllexport) DWORD DoWork(void* arg) + { + MessageBoxA(NULL, (char*)arg, "Injected Process", MB_OK); + SetCurrentProcessExplicitAppUserModelID(L"TEST"); + FreeLibraryAndExitThread(us, 0); + return 0; + } +} + diff --git a/InjectAppUserModelId/InjectAppUserModelId.vcxproj b/InjectAppUserModelId/InjectAppUserModelId.vcxproj new file mode 100644 index 0000000..672b2c7 --- /dev/null +++ b/InjectAppUserModelId/InjectAppUserModelId.vcxproj @@ -0,0 +1,173 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + 16.0 + {AF8B71B3-88B6-4DDA-8442-192079D160DE} + Win32Proj + InjectAppUserModelId + 10.0 + + + + DynamicLibrary + true + v142 + Unicode + + + DynamicLibrary + false + v142 + true + Unicode + + + DynamicLibrary + true + v142 + Unicode + + + DynamicLibrary + false + v142 + true + Unicode + + + + + + + + + + + + + + + + + + + + + true + $(ProjectName)_x64 + + + true + $(ProjectName)_x86 + + + false + $(ProjectName)_x86 + + + false + $(ProjectName)_x64 + + + + Use + Level3 + true + _DEBUG;INJECTAPPUSERMODELID_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + true + pch.h + + + Windows + true + false + + + + + Use + Level3 + true + WIN32;_DEBUG;INJECTAPPUSERMODELID_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + true + pch.h + + + Windows + true + false + + + + + Use + Level3 + true + true + true + WIN32;NDEBUG;INJECTAPPUSERMODELID_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + true + pch.h + + + Windows + true + true + true + false + + + + + Use + Level3 + true + true + true + NDEBUG;INJECTAPPUSERMODELID_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + true + pch.h + + + Windows + true + true + true + false + + + + + + + + + + Create + Create + Create + Create + + + + + + \ No newline at end of file diff --git a/InjectAppUserModelId/InjectAppUserModelId.vcxproj.filters b/InjectAppUserModelId/InjectAppUserModelId.vcxproj.filters new file mode 100644 index 0000000..b558337 --- /dev/null +++ b/InjectAppUserModelId/InjectAppUserModelId.vcxproj.filters @@ -0,0 +1,33 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;c++;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Header Files + + + Header Files + + + + + Source Files + + + Source Files + + + \ No newline at end of file diff --git a/InjectAppUserModelId/dllmain.cpp b/InjectAppUserModelId/dllmain.cpp new file mode 100644 index 0000000..b37440c --- /dev/null +++ b/InjectAppUserModelId/dllmain.cpp @@ -0,0 +1,35 @@ +// dllmain.cpp : Defines the entry point for the DLL application. +#include "pch.h" +#include +#include + +HMODULE us; + +BOOL APIENTRY DllMain( HMODULE hModule, + DWORD ul_reason_for_call, + LPVOID lpReserved + ) +{ + us = hModule; + switch (ul_reason_for_call) + { + case DLL_PROCESS_ATTACH: + case DLL_THREAD_ATTACH: + case DLL_THREAD_DETACH: + case DLL_PROCESS_DETACH: + break; + } + return TRUE; +} + +extern "C" +{ + __declspec(dllexport) DWORD DoWork(void* arg) + { + MessageBoxA(NULL, (char*)arg, "Injected Process", MB_OK); + SetCurrentProcessExplicitAppUserModelID(L"TEST"); + FreeLibraryAndExitThread(us, 0); + return 0; + } +} + diff --git a/InjectAppUserModelId/framework.h b/InjectAppUserModelId/framework.h new file mode 100644 index 0000000..a9744f8 --- /dev/null +++ b/InjectAppUserModelId/framework.h @@ -0,0 +1,5 @@ +#pragma once + +#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers +// Windows Header Files +#include diff --git a/InjectAppUserModelId/InjectAppUserModelId.vcxproj b/InjectAppUserModelId/InjectAppUserModelId.vcxproj new file mode 100644 index 0000000..672b2c7 --- /dev/null +++ b/InjectAppUserModelId/InjectAppUserModelId.vcxproj @@ -0,0 +1,173 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + 16.0 + {AF8B71B3-88B6-4DDA-8442-192079D160DE} + Win32Proj + InjectAppUserModelId + 10.0 + + + + DynamicLibrary + true + v142 + Unicode + + + DynamicLibrary + false + v142 + true + Unicode + + + DynamicLibrary + true + v142 + Unicode + + + DynamicLibrary + false + v142 + true + Unicode + + + + + + + + + + + + + + + + + + + + + true + $(ProjectName)_x64 + + + true + $(ProjectName)_x86 + + + false + $(ProjectName)_x86 + + + false + $(ProjectName)_x64 + + + + Use + Level3 + true + _DEBUG;INJECTAPPUSERMODELID_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + true + pch.h + + + Windows + true + false + + + + + Use + Level3 + true + WIN32;_DEBUG;INJECTAPPUSERMODELID_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + true + pch.h + + + Windows + true + false + + + + + Use + Level3 + true + true + true + WIN32;NDEBUG;INJECTAPPUSERMODELID_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + true + pch.h + + + Windows + true + true + true + false + + + + + Use + Level3 + true + true + true + NDEBUG;INJECTAPPUSERMODELID_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + true + pch.h + + + Windows + true + true + true + false + + + + + + + + + + Create + Create + Create + Create + + + + + + \ No newline at end of file diff --git a/InjectAppUserModelId/InjectAppUserModelId.vcxproj.filters b/InjectAppUserModelId/InjectAppUserModelId.vcxproj.filters new file mode 100644 index 0000000..b558337 --- /dev/null +++ b/InjectAppUserModelId/InjectAppUserModelId.vcxproj.filters @@ -0,0 +1,33 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;c++;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Header Files + + + Header Files + + + + + Source Files + + + Source Files + + + \ No newline at end of file diff --git a/InjectAppUserModelId/dllmain.cpp b/InjectAppUserModelId/dllmain.cpp new file mode 100644 index 0000000..b37440c --- /dev/null +++ b/InjectAppUserModelId/dllmain.cpp @@ -0,0 +1,35 @@ +// dllmain.cpp : Defines the entry point for the DLL application. +#include "pch.h" +#include +#include + +HMODULE us; + +BOOL APIENTRY DllMain( HMODULE hModule, + DWORD ul_reason_for_call, + LPVOID lpReserved + ) +{ + us = hModule; + switch (ul_reason_for_call) + { + case DLL_PROCESS_ATTACH: + case DLL_THREAD_ATTACH: + case DLL_THREAD_DETACH: + case DLL_PROCESS_DETACH: + break; + } + return TRUE; +} + +extern "C" +{ + __declspec(dllexport) DWORD DoWork(void* arg) + { + MessageBoxA(NULL, (char*)arg, "Injected Process", MB_OK); + SetCurrentProcessExplicitAppUserModelID(L"TEST"); + FreeLibraryAndExitThread(us, 0); + return 0; + } +} + diff --git a/InjectAppUserModelId/framework.h b/InjectAppUserModelId/framework.h new file mode 100644 index 0000000..a9744f8 --- /dev/null +++ b/InjectAppUserModelId/framework.h @@ -0,0 +1,5 @@ +#pragma once + +#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers +// Windows Header Files +#include diff --git a/InjectAppUserModelId/pch.cpp b/InjectAppUserModelId/pch.cpp new file mode 100644 index 0000000..91c22df --- /dev/null +++ b/InjectAppUserModelId/pch.cpp @@ -0,0 +1,5 @@ +// pch.cpp: source file corresponding to the pre-compiled header + +#include "pch.h" + +// When you are using pre-compiled headers, this source file is necessary for compilation to succeed. diff --git a/InjectAppUserModelId/InjectAppUserModelId.vcxproj b/InjectAppUserModelId/InjectAppUserModelId.vcxproj new file mode 100644 index 0000000..672b2c7 --- /dev/null +++ b/InjectAppUserModelId/InjectAppUserModelId.vcxproj @@ -0,0 +1,173 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + 16.0 + {AF8B71B3-88B6-4DDA-8442-192079D160DE} + Win32Proj + InjectAppUserModelId + 10.0 + + + + DynamicLibrary + true + v142 + Unicode + + + DynamicLibrary + false + v142 + true + Unicode + + + DynamicLibrary + true + v142 + Unicode + + + DynamicLibrary + false + v142 + true + Unicode + + + + + + + + + + + + + + + + + + + + + true + $(ProjectName)_x64 + + + true + $(ProjectName)_x86 + + + false + $(ProjectName)_x86 + + + false + $(ProjectName)_x64 + + + + Use + Level3 + true + _DEBUG;INJECTAPPUSERMODELID_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + true + pch.h + + + Windows + true + false + + + + + Use + Level3 + true + WIN32;_DEBUG;INJECTAPPUSERMODELID_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + true + pch.h + + + Windows + true + false + + + + + Use + Level3 + true + true + true + WIN32;NDEBUG;INJECTAPPUSERMODELID_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + true + pch.h + + + Windows + true + true + true + false + + + + + Use + Level3 + true + true + true + NDEBUG;INJECTAPPUSERMODELID_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + true + pch.h + + + Windows + true + true + true + false + + + + + + + + + + Create + Create + Create + Create + + + + + + \ No newline at end of file diff --git a/InjectAppUserModelId/InjectAppUserModelId.vcxproj.filters b/InjectAppUserModelId/InjectAppUserModelId.vcxproj.filters new file mode 100644 index 0000000..b558337 --- /dev/null +++ b/InjectAppUserModelId/InjectAppUserModelId.vcxproj.filters @@ -0,0 +1,33 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;c++;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Header Files + + + Header Files + + + + + Source Files + + + Source Files + + + \ No newline at end of file diff --git a/InjectAppUserModelId/dllmain.cpp b/InjectAppUserModelId/dllmain.cpp new file mode 100644 index 0000000..b37440c --- /dev/null +++ b/InjectAppUserModelId/dllmain.cpp @@ -0,0 +1,35 @@ +// dllmain.cpp : Defines the entry point for the DLL application. +#include "pch.h" +#include +#include + +HMODULE us; + +BOOL APIENTRY DllMain( HMODULE hModule, + DWORD ul_reason_for_call, + LPVOID lpReserved + ) +{ + us = hModule; + switch (ul_reason_for_call) + { + case DLL_PROCESS_ATTACH: + case DLL_THREAD_ATTACH: + case DLL_THREAD_DETACH: + case DLL_PROCESS_DETACH: + break; + } + return TRUE; +} + +extern "C" +{ + __declspec(dllexport) DWORD DoWork(void* arg) + { + MessageBoxA(NULL, (char*)arg, "Injected Process", MB_OK); + SetCurrentProcessExplicitAppUserModelID(L"TEST"); + FreeLibraryAndExitThread(us, 0); + return 0; + } +} + diff --git a/InjectAppUserModelId/framework.h b/InjectAppUserModelId/framework.h new file mode 100644 index 0000000..a9744f8 --- /dev/null +++ b/InjectAppUserModelId/framework.h @@ -0,0 +1,5 @@ +#pragma once + +#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers +// Windows Header Files +#include diff --git a/InjectAppUserModelId/pch.cpp b/InjectAppUserModelId/pch.cpp new file mode 100644 index 0000000..91c22df --- /dev/null +++ b/InjectAppUserModelId/pch.cpp @@ -0,0 +1,5 @@ +// pch.cpp: source file corresponding to the pre-compiled header + +#include "pch.h" + +// When you are using pre-compiled headers, this source file is necessary for compilation to succeed. diff --git a/InjectAppUserModelId/pch.h b/InjectAppUserModelId/pch.h new file mode 100644 index 0000000..04ff4c2 --- /dev/null +++ b/InjectAppUserModelId/pch.h @@ -0,0 +1,13 @@ +// pch.h: This is a precompiled header file. +// Files listed below are compiled only once, improving build performance for future builds. +// This also affects IntelliSense performance, including code completion and many code browsing features. +// However, files listed here are ALL re-compiled if any one of them is updated between builds. +// Do not add files here that you will be updating frequently as this negates the performance advantage. + +#ifndef PCH_H +#define PCH_H + +// add headers that you want to pre-compile here +#include "framework.h" + +#endif //PCH_H diff --git a/InjectAppUserModelId/InjectAppUserModelId.vcxproj b/InjectAppUserModelId/InjectAppUserModelId.vcxproj new file mode 100644 index 0000000..672b2c7 --- /dev/null +++ b/InjectAppUserModelId/InjectAppUserModelId.vcxproj @@ -0,0 +1,173 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + 16.0 + {AF8B71B3-88B6-4DDA-8442-192079D160DE} + Win32Proj + InjectAppUserModelId + 10.0 + + + + DynamicLibrary + true + v142 + Unicode + + + DynamicLibrary + false + v142 + true + Unicode + + + DynamicLibrary + true + v142 + Unicode + + + DynamicLibrary + false + v142 + true + Unicode + + + + + + + + + + + + + + + + + + + + + true + $(ProjectName)_x64 + + + true + $(ProjectName)_x86 + + + false + $(ProjectName)_x86 + + + false + $(ProjectName)_x64 + + + + Use + Level3 + true + _DEBUG;INJECTAPPUSERMODELID_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + true + pch.h + + + Windows + true + false + + + + + Use + Level3 + true + WIN32;_DEBUG;INJECTAPPUSERMODELID_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + true + pch.h + + + Windows + true + false + + + + + Use + Level3 + true + true + true + WIN32;NDEBUG;INJECTAPPUSERMODELID_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + true + pch.h + + + Windows + true + true + true + false + + + + + Use + Level3 + true + true + true + NDEBUG;INJECTAPPUSERMODELID_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + true + pch.h + + + Windows + true + true + true + false + + + + + + + + + + Create + Create + Create + Create + + + + + + \ No newline at end of file diff --git a/InjectAppUserModelId/InjectAppUserModelId.vcxproj.filters b/InjectAppUserModelId/InjectAppUserModelId.vcxproj.filters new file mode 100644 index 0000000..b558337 --- /dev/null +++ b/InjectAppUserModelId/InjectAppUserModelId.vcxproj.filters @@ -0,0 +1,33 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;c++;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Header Files + + + Header Files + + + + + Source Files + + + Source Files + + + \ No newline at end of file diff --git a/InjectAppUserModelId/dllmain.cpp b/InjectAppUserModelId/dllmain.cpp new file mode 100644 index 0000000..b37440c --- /dev/null +++ b/InjectAppUserModelId/dllmain.cpp @@ -0,0 +1,35 @@ +// dllmain.cpp : Defines the entry point for the DLL application. +#include "pch.h" +#include +#include + +HMODULE us; + +BOOL APIENTRY DllMain( HMODULE hModule, + DWORD ul_reason_for_call, + LPVOID lpReserved + ) +{ + us = hModule; + switch (ul_reason_for_call) + { + case DLL_PROCESS_ATTACH: + case DLL_THREAD_ATTACH: + case DLL_THREAD_DETACH: + case DLL_PROCESS_DETACH: + break; + } + return TRUE; +} + +extern "C" +{ + __declspec(dllexport) DWORD DoWork(void* arg) + { + MessageBoxA(NULL, (char*)arg, "Injected Process", MB_OK); + SetCurrentProcessExplicitAppUserModelID(L"TEST"); + FreeLibraryAndExitThread(us, 0); + return 0; + } +} + diff --git a/InjectAppUserModelId/framework.h b/InjectAppUserModelId/framework.h new file mode 100644 index 0000000..a9744f8 --- /dev/null +++ b/InjectAppUserModelId/framework.h @@ -0,0 +1,5 @@ +#pragma once + +#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers +// Windows Header Files +#include diff --git a/InjectAppUserModelId/pch.cpp b/InjectAppUserModelId/pch.cpp new file mode 100644 index 0000000..91c22df --- /dev/null +++ b/InjectAppUserModelId/pch.cpp @@ -0,0 +1,5 @@ +// pch.cpp: source file corresponding to the pre-compiled header + +#include "pch.h" + +// When you are using pre-compiled headers, this source file is necessary for compilation to succeed. diff --git a/InjectAppUserModelId/pch.h b/InjectAppUserModelId/pch.h new file mode 100644 index 0000000..04ff4c2 --- /dev/null +++ b/InjectAppUserModelId/pch.h @@ -0,0 +1,13 @@ +// pch.h: This is a precompiled header file. +// Files listed below are compiled only once, improving build performance for future builds. +// This also affects IntelliSense performance, including code completion and many code browsing features. +// However, files listed here are ALL re-compiled if any one of them is updated between builds. +// Do not add files here that you will be updating frequently as this negates the performance advantage. + +#ifndef PCH_H +#define PCH_H + +// add headers that you want to pre-compile here +#include "framework.h" + +#endif //PCH_H diff --git a/InjectHelper/InjectHelper.vcxproj b/InjectHelper/InjectHelper.vcxproj new file mode 100644 index 0000000..9b07627 --- /dev/null +++ b/InjectHelper/InjectHelper.vcxproj @@ -0,0 +1,154 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + 16.0 + {0A18B029-4108-49F5-904F-09369254CC28} + InjectHelper + 10.0 + + + + Application + true + v142 + Unicode + + + Application + false + v142 + true + Unicode + + + Application + true + v142 + Unicode + + + Application + false + v142 + true + Unicode + + + + + + + + + + + + + + + + + + + + + true + $(ProjectName)_x86 + + + true + $(ProjectName)_x64 + + + false + $(ProjectName)_x86 + + + false + $(ProjectName)_x64 + + + + Level3 + true + _DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + stdcpp17 + + + Windows + true + + + + + Level3 + true + _DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + stdcpp17 + + + Windows + true + + + + + Level3 + true + true + true + NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + stdcpp17 + + + Windows + true + true + true + + + + + Level3 + true + true + true + NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + stdcpp17 + + + Windows + true + true + true + + + + + + + + + \ No newline at end of file diff --git a/InjectAppUserModelId/InjectAppUserModelId.vcxproj b/InjectAppUserModelId/InjectAppUserModelId.vcxproj new file mode 100644 index 0000000..672b2c7 --- /dev/null +++ b/InjectAppUserModelId/InjectAppUserModelId.vcxproj @@ -0,0 +1,173 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + 16.0 + {AF8B71B3-88B6-4DDA-8442-192079D160DE} + Win32Proj + InjectAppUserModelId + 10.0 + + + + DynamicLibrary + true + v142 + Unicode + + + DynamicLibrary + false + v142 + true + Unicode + + + DynamicLibrary + true + v142 + Unicode + + + DynamicLibrary + false + v142 + true + Unicode + + + + + + + + + + + + + + + + + + + + + true + $(ProjectName)_x64 + + + true + $(ProjectName)_x86 + + + false + $(ProjectName)_x86 + + + false + $(ProjectName)_x64 + + + + Use + Level3 + true + _DEBUG;INJECTAPPUSERMODELID_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + true + pch.h + + + Windows + true + false + + + + + Use + Level3 + true + WIN32;_DEBUG;INJECTAPPUSERMODELID_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + true + pch.h + + + Windows + true + false + + + + + Use + Level3 + true + true + true + WIN32;NDEBUG;INJECTAPPUSERMODELID_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + true + pch.h + + + Windows + true + true + true + false + + + + + Use + Level3 + true + true + true + NDEBUG;INJECTAPPUSERMODELID_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + true + pch.h + + + Windows + true + true + true + false + + + + + + + + + + Create + Create + Create + Create + + + + + + \ No newline at end of file diff --git a/InjectAppUserModelId/InjectAppUserModelId.vcxproj.filters b/InjectAppUserModelId/InjectAppUserModelId.vcxproj.filters new file mode 100644 index 0000000..b558337 --- /dev/null +++ b/InjectAppUserModelId/InjectAppUserModelId.vcxproj.filters @@ -0,0 +1,33 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;c++;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Header Files + + + Header Files + + + + + Source Files + + + Source Files + + + \ No newline at end of file diff --git a/InjectAppUserModelId/dllmain.cpp b/InjectAppUserModelId/dllmain.cpp new file mode 100644 index 0000000..b37440c --- /dev/null +++ b/InjectAppUserModelId/dllmain.cpp @@ -0,0 +1,35 @@ +// dllmain.cpp : Defines the entry point for the DLL application. +#include "pch.h" +#include +#include + +HMODULE us; + +BOOL APIENTRY DllMain( HMODULE hModule, + DWORD ul_reason_for_call, + LPVOID lpReserved + ) +{ + us = hModule; + switch (ul_reason_for_call) + { + case DLL_PROCESS_ATTACH: + case DLL_THREAD_ATTACH: + case DLL_THREAD_DETACH: + case DLL_PROCESS_DETACH: + break; + } + return TRUE; +} + +extern "C" +{ + __declspec(dllexport) DWORD DoWork(void* arg) + { + MessageBoxA(NULL, (char*)arg, "Injected Process", MB_OK); + SetCurrentProcessExplicitAppUserModelID(L"TEST"); + FreeLibraryAndExitThread(us, 0); + return 0; + } +} + diff --git a/InjectAppUserModelId/framework.h b/InjectAppUserModelId/framework.h new file mode 100644 index 0000000..a9744f8 --- /dev/null +++ b/InjectAppUserModelId/framework.h @@ -0,0 +1,5 @@ +#pragma once + +#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers +// Windows Header Files +#include diff --git a/InjectAppUserModelId/pch.cpp b/InjectAppUserModelId/pch.cpp new file mode 100644 index 0000000..91c22df --- /dev/null +++ b/InjectAppUserModelId/pch.cpp @@ -0,0 +1,5 @@ +// pch.cpp: source file corresponding to the pre-compiled header + +#include "pch.h" + +// When you are using pre-compiled headers, this source file is necessary for compilation to succeed. diff --git a/InjectAppUserModelId/pch.h b/InjectAppUserModelId/pch.h new file mode 100644 index 0000000..04ff4c2 --- /dev/null +++ b/InjectAppUserModelId/pch.h @@ -0,0 +1,13 @@ +// pch.h: This is a precompiled header file. +// Files listed below are compiled only once, improving build performance for future builds. +// This also affects IntelliSense performance, including code completion and many code browsing features. +// However, files listed here are ALL re-compiled if any one of them is updated between builds. +// Do not add files here that you will be updating frequently as this negates the performance advantage. + +#ifndef PCH_H +#define PCH_H + +// add headers that you want to pre-compile here +#include "framework.h" + +#endif //PCH_H diff --git a/InjectHelper/InjectHelper.vcxproj b/InjectHelper/InjectHelper.vcxproj new file mode 100644 index 0000000..9b07627 --- /dev/null +++ b/InjectHelper/InjectHelper.vcxproj @@ -0,0 +1,154 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + 16.0 + {0A18B029-4108-49F5-904F-09369254CC28} + InjectHelper + 10.0 + + + + Application + true + v142 + Unicode + + + Application + false + v142 + true + Unicode + + + Application + true + v142 + Unicode + + + Application + false + v142 + true + Unicode + + + + + + + + + + + + + + + + + + + + + true + $(ProjectName)_x86 + + + true + $(ProjectName)_x64 + + + false + $(ProjectName)_x86 + + + false + $(ProjectName)_x64 + + + + Level3 + true + _DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + stdcpp17 + + + Windows + true + + + + + Level3 + true + _DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + stdcpp17 + + + Windows + true + + + + + Level3 + true + true + true + NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + stdcpp17 + + + Windows + true + true + true + + + + + Level3 + true + true + true + NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + stdcpp17 + + + Windows + true + true + true + + + + + + + + + \ No newline at end of file diff --git a/InjectHelper/InjectHelper.vcxproj.filters b/InjectHelper/InjectHelper.vcxproj.filters new file mode 100644 index 0000000..3e6df28 --- /dev/null +++ b/InjectHelper/InjectHelper.vcxproj.filters @@ -0,0 +1,22 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;c++;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Source Files + + + \ No newline at end of file diff --git a/InjectAppUserModelId/InjectAppUserModelId.vcxproj b/InjectAppUserModelId/InjectAppUserModelId.vcxproj new file mode 100644 index 0000000..672b2c7 --- /dev/null +++ b/InjectAppUserModelId/InjectAppUserModelId.vcxproj @@ -0,0 +1,173 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + 16.0 + {AF8B71B3-88B6-4DDA-8442-192079D160DE} + Win32Proj + InjectAppUserModelId + 10.0 + + + + DynamicLibrary + true + v142 + Unicode + + + DynamicLibrary + false + v142 + true + Unicode + + + DynamicLibrary + true + v142 + Unicode + + + DynamicLibrary + false + v142 + true + Unicode + + + + + + + + + + + + + + + + + + + + + true + $(ProjectName)_x64 + + + true + $(ProjectName)_x86 + + + false + $(ProjectName)_x86 + + + false + $(ProjectName)_x64 + + + + Use + Level3 + true + _DEBUG;INJECTAPPUSERMODELID_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + true + pch.h + + + Windows + true + false + + + + + Use + Level3 + true + WIN32;_DEBUG;INJECTAPPUSERMODELID_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + true + pch.h + + + Windows + true + false + + + + + Use + Level3 + true + true + true + WIN32;NDEBUG;INJECTAPPUSERMODELID_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + true + pch.h + + + Windows + true + true + true + false + + + + + Use + Level3 + true + true + true + NDEBUG;INJECTAPPUSERMODELID_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + true + pch.h + + + Windows + true + true + true + false + + + + + + + + + + Create + Create + Create + Create + + + + + + \ No newline at end of file diff --git a/InjectAppUserModelId/InjectAppUserModelId.vcxproj.filters b/InjectAppUserModelId/InjectAppUserModelId.vcxproj.filters new file mode 100644 index 0000000..b558337 --- /dev/null +++ b/InjectAppUserModelId/InjectAppUserModelId.vcxproj.filters @@ -0,0 +1,33 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;c++;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Header Files + + + Header Files + + + + + Source Files + + + Source Files + + + \ No newline at end of file diff --git a/InjectAppUserModelId/dllmain.cpp b/InjectAppUserModelId/dllmain.cpp new file mode 100644 index 0000000..b37440c --- /dev/null +++ b/InjectAppUserModelId/dllmain.cpp @@ -0,0 +1,35 @@ +// dllmain.cpp : Defines the entry point for the DLL application. +#include "pch.h" +#include +#include + +HMODULE us; + +BOOL APIENTRY DllMain( HMODULE hModule, + DWORD ul_reason_for_call, + LPVOID lpReserved + ) +{ + us = hModule; + switch (ul_reason_for_call) + { + case DLL_PROCESS_ATTACH: + case DLL_THREAD_ATTACH: + case DLL_THREAD_DETACH: + case DLL_PROCESS_DETACH: + break; + } + return TRUE; +} + +extern "C" +{ + __declspec(dllexport) DWORD DoWork(void* arg) + { + MessageBoxA(NULL, (char*)arg, "Injected Process", MB_OK); + SetCurrentProcessExplicitAppUserModelID(L"TEST"); + FreeLibraryAndExitThread(us, 0); + return 0; + } +} + diff --git a/InjectAppUserModelId/framework.h b/InjectAppUserModelId/framework.h new file mode 100644 index 0000000..a9744f8 --- /dev/null +++ b/InjectAppUserModelId/framework.h @@ -0,0 +1,5 @@ +#pragma once + +#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers +// Windows Header Files +#include diff --git a/InjectAppUserModelId/pch.cpp b/InjectAppUserModelId/pch.cpp new file mode 100644 index 0000000..91c22df --- /dev/null +++ b/InjectAppUserModelId/pch.cpp @@ -0,0 +1,5 @@ +// pch.cpp: source file corresponding to the pre-compiled header + +#include "pch.h" + +// When you are using pre-compiled headers, this source file is necessary for compilation to succeed. diff --git a/InjectAppUserModelId/pch.h b/InjectAppUserModelId/pch.h new file mode 100644 index 0000000..04ff4c2 --- /dev/null +++ b/InjectAppUserModelId/pch.h @@ -0,0 +1,13 @@ +// pch.h: This is a precompiled header file. +// Files listed below are compiled only once, improving build performance for future builds. +// This also affects IntelliSense performance, including code completion and many code browsing features. +// However, files listed here are ALL re-compiled if any one of them is updated between builds. +// Do not add files here that you will be updating frequently as this negates the performance advantage. + +#ifndef PCH_H +#define PCH_H + +// add headers that you want to pre-compile here +#include "framework.h" + +#endif //PCH_H diff --git a/InjectHelper/InjectHelper.vcxproj b/InjectHelper/InjectHelper.vcxproj new file mode 100644 index 0000000..9b07627 --- /dev/null +++ b/InjectHelper/InjectHelper.vcxproj @@ -0,0 +1,154 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + 16.0 + {0A18B029-4108-49F5-904F-09369254CC28} + InjectHelper + 10.0 + + + + Application + true + v142 + Unicode + + + Application + false + v142 + true + Unicode + + + Application + true + v142 + Unicode + + + Application + false + v142 + true + Unicode + + + + + + + + + + + + + + + + + + + + + true + $(ProjectName)_x86 + + + true + $(ProjectName)_x64 + + + false + $(ProjectName)_x86 + + + false + $(ProjectName)_x64 + + + + Level3 + true + _DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + stdcpp17 + + + Windows + true + + + + + Level3 + true + _DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + stdcpp17 + + + Windows + true + + + + + Level3 + true + true + true + NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + stdcpp17 + + + Windows + true + true + true + + + + + Level3 + true + true + true + NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + stdcpp17 + + + Windows + true + true + true + + + + + + + + + \ No newline at end of file diff --git a/InjectHelper/InjectHelper.vcxproj.filters b/InjectHelper/InjectHelper.vcxproj.filters new file mode 100644 index 0000000..3e6df28 --- /dev/null +++ b/InjectHelper/InjectHelper.vcxproj.filters @@ -0,0 +1,22 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;c++;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Source Files + + + \ No newline at end of file diff --git a/InjectHelper/main.cpp b/InjectHelper/main.cpp new file mode 100644 index 0000000..a1b36e5 --- /dev/null +++ b/InjectHelper/main.cpp @@ -0,0 +1,175 @@ +#include +#include +#include +#include +#include + +void ShowError(DWORD); +void ShowLastError(); + +using std::filesystem::path; + +int __stdcall wWinMain( + HINSTANCE hInstance, + HINSTANCE hPrevInstance, + LPWSTR lpCmdLine, + int nShowCmd +) +{ + int numArgs = 0; + LPWSTR* args = CommandLineToArgvW(lpCmdLine, &numArgs); + if (numArgs < 1 || std::wcslen(lpCmdLine) == 0) + { + MessageBoxA(NULL, "No PID", "Error", MB_OK); + return -1; + } + + int pid = -1; + try + { + pid = std::stoi(args[0]); + } + catch (std::invalid_argument e) + { + char msg[256]; + sprintf_s(msg, "Invalid process id: %s", e.what()); + MessageBoxA(NULL, msg, "Error", MB_OK); + return -1; + } + + CreateProcess(L"%localappdata%/wsltty/bin/mintty.exe", L"", NULL, NULL, FALSE, 0, NULL, NULL,) + + HANDLE process = OpenProcess(PROCESS_CREATE_THREAD | PROCESS_QUERY_INFORMATION | PROCESS_VM_READ | PROCESS_VM_WRITE | PROCESS_VM_OPERATION, FALSE, pid); + if (process == NULL) + { + ShowLastError(); + return -1; + } + + HMODULE kernel = GetModuleHandle(L"kernel32.dll"); + if (kernel == NULL) + { + ShowLastError(); + return -1; + } + + path lib; + try + { + lib = std::filesystem::canonical(path("InjectAppUserModelId_x64.dll")); + } + catch (std::filesystem::filesystem_error e) + { + ShowError(e.code().value()); + return -1; + } + const std::string s = lib.string(); + char* libCstr = new char[s.length() + 1]; + memcpy(libCstr, s.c_str(), s.length() + 1); + + FARPROC loadLibraryAddr = GetProcAddress(kernel, "LoadLibraryA"); + if (loadLibraryAddr == NULL) + { + ShowLastError(); + return -1; + } + + HMODULE injected = LoadLibrary(lib.c_str()); + if (injected == NULL) + { + ShowLastError(); + return -1; + } + + FARPROC targetAddr = GetProcAddress(injected, "DoWork"); + if (targetAddr == NULL) + { + ShowLastError(); + return -1; + } + + INT_PTR offset = (INT_PTR)targetAddr - (INT_PTR)injected; + + void* remoteMem = VirtualAllocEx(process, NULL, strlen(libCstr) + 1, MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE); + if (!WriteProcessMemory(process, remoteMem, libCstr, strlen(libCstr) + 1, NULL)) + { + ShowLastError(); + return -1; + } + + HANDLE thread = CreateRemoteThread(process, NULL, 0, (LPTHREAD_START_ROUTINE)loadLibraryAddr, remoteMem, 0, NULL); + WaitForSingleObject(thread, INFINITE); + + DWORD ret = 0; + GetExitCodeThread(thread, &ret); + + if (ret == NULL) + { + ShowError(ret); + return -1; + } + + HMODULE* remoteModuleList = new HMODULE[1000]; + DWORD needed = 0; + EnumProcessModules(process, remoteModuleList, 1000, &needed); + int numModules = needed / sizeof(HMODULE); + + bool found = false; + + wchar_t* name = new wchar_t[1024]; + for (int i = 0; i < numModules; i++) + { + GetModuleFileNameEx(process, remoteModuleList[i], name, 1023); + std::wstring modName(name); + + if (modName.find(L"Inject") != std::wstring::npos) + { + const char* msg = "Message from here"; + void* remoteMem = VirtualAllocEx(process, NULL, strlen(msg) + 1, MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE); + if (!WriteProcessMemory(process, remoteMem, msg, strlen(msg) + 1, NULL)) + { + ShowLastError(); + return -1; + } + + HANDLE thread = CreateRemoteThread(process, NULL, 0, (LPTHREAD_START_ROUTINE)((INT_PTR)remoteModuleList[i] + offset), remoteMem, 0, NULL); + WaitForSingleObject(thread, INFINITE); + + DWORD ret = 0; + GetExitCodeThread(thread, &ret); + + if (ret != 0) + { + char err[128]; + sprintf_s(err, "Error from injected function: %d", ret); + MessageBoxA(NULL, err, "Error", MB_OK); + return -1; + } + + found = true; + break; + } + } + + if (!found) + { + MessageBox(NULL, L"Couldn't find injected dll", L"Error", MB_OK); + return -1; + } + + MessageBoxA(NULL, "Success!", "OK", MB_OK); + + return 0; +} + +void ShowLastError() +{ + ShowError(GetLastError()); +} + +void ShowError(DWORD error) +{ + LPTSTR err; + FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL, error, 0, (LPTSTR)&err, 0, NULL); + MessageBoxW(NULL, err, L"Error", MB_OK); +} \ No newline at end of file diff --git a/InjectAppUserModelId/InjectAppUserModelId.vcxproj b/InjectAppUserModelId/InjectAppUserModelId.vcxproj new file mode 100644 index 0000000..672b2c7 --- /dev/null +++ b/InjectAppUserModelId/InjectAppUserModelId.vcxproj @@ -0,0 +1,173 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + 16.0 + {AF8B71B3-88B6-4DDA-8442-192079D160DE} + Win32Proj + InjectAppUserModelId + 10.0 + + + + DynamicLibrary + true + v142 + Unicode + + + DynamicLibrary + false + v142 + true + Unicode + + + DynamicLibrary + true + v142 + Unicode + + + DynamicLibrary + false + v142 + true + Unicode + + + + + + + + + + + + + + + + + + + + + true + $(ProjectName)_x64 + + + true + $(ProjectName)_x86 + + + false + $(ProjectName)_x86 + + + false + $(ProjectName)_x64 + + + + Use + Level3 + true + _DEBUG;INJECTAPPUSERMODELID_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + true + pch.h + + + Windows + true + false + + + + + Use + Level3 + true + WIN32;_DEBUG;INJECTAPPUSERMODELID_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + true + pch.h + + + Windows + true + false + + + + + Use + Level3 + true + true + true + WIN32;NDEBUG;INJECTAPPUSERMODELID_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + true + pch.h + + + Windows + true + true + true + false + + + + + Use + Level3 + true + true + true + NDEBUG;INJECTAPPUSERMODELID_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + true + pch.h + + + Windows + true + true + true + false + + + + + + + + + + Create + Create + Create + Create + + + + + + \ No newline at end of file diff --git a/InjectAppUserModelId/InjectAppUserModelId.vcxproj.filters b/InjectAppUserModelId/InjectAppUserModelId.vcxproj.filters new file mode 100644 index 0000000..b558337 --- /dev/null +++ b/InjectAppUserModelId/InjectAppUserModelId.vcxproj.filters @@ -0,0 +1,33 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;c++;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Header Files + + + Header Files + + + + + Source Files + + + Source Files + + + \ No newline at end of file diff --git a/InjectAppUserModelId/dllmain.cpp b/InjectAppUserModelId/dllmain.cpp new file mode 100644 index 0000000..b37440c --- /dev/null +++ b/InjectAppUserModelId/dllmain.cpp @@ -0,0 +1,35 @@ +// dllmain.cpp : Defines the entry point for the DLL application. +#include "pch.h" +#include +#include + +HMODULE us; + +BOOL APIENTRY DllMain( HMODULE hModule, + DWORD ul_reason_for_call, + LPVOID lpReserved + ) +{ + us = hModule; + switch (ul_reason_for_call) + { + case DLL_PROCESS_ATTACH: + case DLL_THREAD_ATTACH: + case DLL_THREAD_DETACH: + case DLL_PROCESS_DETACH: + break; + } + return TRUE; +} + +extern "C" +{ + __declspec(dllexport) DWORD DoWork(void* arg) + { + MessageBoxA(NULL, (char*)arg, "Injected Process", MB_OK); + SetCurrentProcessExplicitAppUserModelID(L"TEST"); + FreeLibraryAndExitThread(us, 0); + return 0; + } +} + diff --git a/InjectAppUserModelId/framework.h b/InjectAppUserModelId/framework.h new file mode 100644 index 0000000..a9744f8 --- /dev/null +++ b/InjectAppUserModelId/framework.h @@ -0,0 +1,5 @@ +#pragma once + +#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers +// Windows Header Files +#include diff --git a/InjectAppUserModelId/pch.cpp b/InjectAppUserModelId/pch.cpp new file mode 100644 index 0000000..91c22df --- /dev/null +++ b/InjectAppUserModelId/pch.cpp @@ -0,0 +1,5 @@ +// pch.cpp: source file corresponding to the pre-compiled header + +#include "pch.h" + +// When you are using pre-compiled headers, this source file is necessary for compilation to succeed. diff --git a/InjectAppUserModelId/pch.h b/InjectAppUserModelId/pch.h new file mode 100644 index 0000000..04ff4c2 --- /dev/null +++ b/InjectAppUserModelId/pch.h @@ -0,0 +1,13 @@ +// pch.h: This is a precompiled header file. +// Files listed below are compiled only once, improving build performance for future builds. +// This also affects IntelliSense performance, including code completion and many code browsing features. +// However, files listed here are ALL re-compiled if any one of them is updated between builds. +// Do not add files here that you will be updating frequently as this negates the performance advantage. + +#ifndef PCH_H +#define PCH_H + +// add headers that you want to pre-compile here +#include "framework.h" + +#endif //PCH_H diff --git a/InjectHelper/InjectHelper.vcxproj b/InjectHelper/InjectHelper.vcxproj new file mode 100644 index 0000000..9b07627 --- /dev/null +++ b/InjectHelper/InjectHelper.vcxproj @@ -0,0 +1,154 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + 16.0 + {0A18B029-4108-49F5-904F-09369254CC28} + InjectHelper + 10.0 + + + + Application + true + v142 + Unicode + + + Application + false + v142 + true + Unicode + + + Application + true + v142 + Unicode + + + Application + false + v142 + true + Unicode + + + + + + + + + + + + + + + + + + + + + true + $(ProjectName)_x86 + + + true + $(ProjectName)_x64 + + + false + $(ProjectName)_x86 + + + false + $(ProjectName)_x64 + + + + Level3 + true + _DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + stdcpp17 + + + Windows + true + + + + + Level3 + true + _DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + stdcpp17 + + + Windows + true + + + + + Level3 + true + true + true + NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + stdcpp17 + + + Windows + true + true + true + + + + + Level3 + true + true + true + NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + stdcpp17 + + + Windows + true + true + true + + + + + + + + + \ No newline at end of file diff --git a/InjectHelper/InjectHelper.vcxproj.filters b/InjectHelper/InjectHelper.vcxproj.filters new file mode 100644 index 0000000..3e6df28 --- /dev/null +++ b/InjectHelper/InjectHelper.vcxproj.filters @@ -0,0 +1,22 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;c++;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Source Files + + + \ No newline at end of file diff --git a/InjectHelper/main.cpp b/InjectHelper/main.cpp new file mode 100644 index 0000000..a1b36e5 --- /dev/null +++ b/InjectHelper/main.cpp @@ -0,0 +1,175 @@ +#include +#include +#include +#include +#include + +void ShowError(DWORD); +void ShowLastError(); + +using std::filesystem::path; + +int __stdcall wWinMain( + HINSTANCE hInstance, + HINSTANCE hPrevInstance, + LPWSTR lpCmdLine, + int nShowCmd +) +{ + int numArgs = 0; + LPWSTR* args = CommandLineToArgvW(lpCmdLine, &numArgs); + if (numArgs < 1 || std::wcslen(lpCmdLine) == 0) + { + MessageBoxA(NULL, "No PID", "Error", MB_OK); + return -1; + } + + int pid = -1; + try + { + pid = std::stoi(args[0]); + } + catch (std::invalid_argument e) + { + char msg[256]; + sprintf_s(msg, "Invalid process id: %s", e.what()); + MessageBoxA(NULL, msg, "Error", MB_OK); + return -1; + } + + CreateProcess(L"%localappdata%/wsltty/bin/mintty.exe", L"", NULL, NULL, FALSE, 0, NULL, NULL,) + + HANDLE process = OpenProcess(PROCESS_CREATE_THREAD | PROCESS_QUERY_INFORMATION | PROCESS_VM_READ | PROCESS_VM_WRITE | PROCESS_VM_OPERATION, FALSE, pid); + if (process == NULL) + { + ShowLastError(); + return -1; + } + + HMODULE kernel = GetModuleHandle(L"kernel32.dll"); + if (kernel == NULL) + { + ShowLastError(); + return -1; + } + + path lib; + try + { + lib = std::filesystem::canonical(path("InjectAppUserModelId_x64.dll")); + } + catch (std::filesystem::filesystem_error e) + { + ShowError(e.code().value()); + return -1; + } + const std::string s = lib.string(); + char* libCstr = new char[s.length() + 1]; + memcpy(libCstr, s.c_str(), s.length() + 1); + + FARPROC loadLibraryAddr = GetProcAddress(kernel, "LoadLibraryA"); + if (loadLibraryAddr == NULL) + { + ShowLastError(); + return -1; + } + + HMODULE injected = LoadLibrary(lib.c_str()); + if (injected == NULL) + { + ShowLastError(); + return -1; + } + + FARPROC targetAddr = GetProcAddress(injected, "DoWork"); + if (targetAddr == NULL) + { + ShowLastError(); + return -1; + } + + INT_PTR offset = (INT_PTR)targetAddr - (INT_PTR)injected; + + void* remoteMem = VirtualAllocEx(process, NULL, strlen(libCstr) + 1, MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE); + if (!WriteProcessMemory(process, remoteMem, libCstr, strlen(libCstr) + 1, NULL)) + { + ShowLastError(); + return -1; + } + + HANDLE thread = CreateRemoteThread(process, NULL, 0, (LPTHREAD_START_ROUTINE)loadLibraryAddr, remoteMem, 0, NULL); + WaitForSingleObject(thread, INFINITE); + + DWORD ret = 0; + GetExitCodeThread(thread, &ret); + + if (ret == NULL) + { + ShowError(ret); + return -1; + } + + HMODULE* remoteModuleList = new HMODULE[1000]; + DWORD needed = 0; + EnumProcessModules(process, remoteModuleList, 1000, &needed); + int numModules = needed / sizeof(HMODULE); + + bool found = false; + + wchar_t* name = new wchar_t[1024]; + for (int i = 0; i < numModules; i++) + { + GetModuleFileNameEx(process, remoteModuleList[i], name, 1023); + std::wstring modName(name); + + if (modName.find(L"Inject") != std::wstring::npos) + { + const char* msg = "Message from here"; + void* remoteMem = VirtualAllocEx(process, NULL, strlen(msg) + 1, MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE); + if (!WriteProcessMemory(process, remoteMem, msg, strlen(msg) + 1, NULL)) + { + ShowLastError(); + return -1; + } + + HANDLE thread = CreateRemoteThread(process, NULL, 0, (LPTHREAD_START_ROUTINE)((INT_PTR)remoteModuleList[i] + offset), remoteMem, 0, NULL); + WaitForSingleObject(thread, INFINITE); + + DWORD ret = 0; + GetExitCodeThread(thread, &ret); + + if (ret != 0) + { + char err[128]; + sprintf_s(err, "Error from injected function: %d", ret); + MessageBoxA(NULL, err, "Error", MB_OK); + return -1; + } + + found = true; + break; + } + } + + if (!found) + { + MessageBox(NULL, L"Couldn't find injected dll", L"Error", MB_OK); + return -1; + } + + MessageBoxA(NULL, "Success!", "OK", MB_OK); + + return 0; +} + +void ShowLastError() +{ + ShowError(GetLastError()); +} + +void ShowError(DWORD error) +{ + LPTSTR err; + FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL, error, 0, (LPTSTR)&err, 0, NULL); + MessageBoxW(NULL, err, L"Error", MB_OK); +} \ No newline at end of file diff --git a/JumpListUtil.sln b/JumpListUtil.sln index 1c5678b..469584c 100755 --- a/JumpListUtil.sln +++ b/JumpListUtil.sln @@ -9,38 +9,75 @@ EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ShortcutUtil", "ShortcutUtil\ShortcutUtil.csproj", "{91BAC03D-BBBB-403C-A8B0-2F70497F39BA}" EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "InjectHelper", "InjectHelper\InjectHelper.vcxproj", "{0A18B029-4108-49F5-904F-09369254CC28}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "InjectAppUserModelId", "InjectAppUserModelId\InjectAppUserModelId.vcxproj", "{AF8B71B3-88B6-4DDA-8442-192079D160DE}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU + Debug|x64 = Debug|x64 Debug|x86 = Debug|x86 Release|Any CPU = Release|Any CPU + Release|x64 = Release|x64 Release|x86 = Release|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {66F50737-A71D-4D5B-83F2-4F06B9F9F9B2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {66F50737-A71D-4D5B-83F2-4F06B9F9F9B2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {66F50737-A71D-4D5B-83F2-4F06B9F9F9B2}.Debug|x86.ActiveCfg = Debug|x86 - {66F50737-A71D-4D5B-83F2-4F06B9F9F9B2}.Debug|x86.Build.0 = Debug|x86 - {66F50737-A71D-4D5B-83F2-4F06B9F9F9B2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {66F50737-A71D-4D5B-83F2-4F06B9F9F9B2}.Release|Any CPU.Build.0 = Release|Any CPU - {66F50737-A71D-4D5B-83F2-4F06B9F9F9B2}.Release|x86.ActiveCfg = Release|x86 - {66F50737-A71D-4D5B-83F2-4F06B9F9F9B2}.Release|x86.Build.0 = Release|x86 + {66F50737-A71D-4D5B-83F2-4F06B9F9F9B2}.Debug|x64.ActiveCfg = Debug|Any CPU + {66F50737-A71D-4D5B-83F2-4F06B9F9F9B2}.Debug|x64.Build.0 = Debug|Any CPU + {66F50737-A71D-4D5B-83F2-4F06B9F9F9B2}.Debug|x86.ActiveCfg = Debug|Any CPU + {66F50737-A71D-4D5B-83F2-4F06B9F9F9B2}.Debug|x86.Build.0 = Debug|Any CPU + {66F50737-A71D-4D5B-83F2-4F06B9F9F9B2}.Release|Any CPU.ActiveCfg = Debug|Any CPU + {66F50737-A71D-4D5B-83F2-4F06B9F9F9B2}.Release|Any CPU.Build.0 = Debug|Any CPU + {66F50737-A71D-4D5B-83F2-4F06B9F9F9B2}.Release|x64.ActiveCfg = Debug|Any CPU + {66F50737-A71D-4D5B-83F2-4F06B9F9F9B2}.Release|x64.Build.0 = Debug|Any CPU + {66F50737-A71D-4D5B-83F2-4F06B9F9F9B2}.Release|x86.ActiveCfg = Debug|Any CPU + {66F50737-A71D-4D5B-83F2-4F06B9F9F9B2}.Release|x86.Build.0 = Debug|Any CPU {443B8959-7F3D-4199-838C-7A805427CE42}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {443B8959-7F3D-4199-838C-7A805427CE42}.Debug|Any CPU.Build.0 = Debug|Any CPU - {443B8959-7F3D-4199-838C-7A805427CE42}.Debug|x86.ActiveCfg = Debug|x86 - {443B8959-7F3D-4199-838C-7A805427CE42}.Debug|x86.Build.0 = Debug|x86 - {443B8959-7F3D-4199-838C-7A805427CE42}.Release|Any CPU.ActiveCfg = Release|Any CPU - {443B8959-7F3D-4199-838C-7A805427CE42}.Release|Any CPU.Build.0 = Release|Any CPU - {443B8959-7F3D-4199-838C-7A805427CE42}.Release|x86.ActiveCfg = Release|x86 - {443B8959-7F3D-4199-838C-7A805427CE42}.Release|x86.Build.0 = Release|x86 + {443B8959-7F3D-4199-838C-7A805427CE42}.Debug|x64.ActiveCfg = Debug|Any CPU + {443B8959-7F3D-4199-838C-7A805427CE42}.Debug|x64.Build.0 = Debug|Any CPU + {443B8959-7F3D-4199-838C-7A805427CE42}.Debug|x86.ActiveCfg = Debug|Any CPU + {443B8959-7F3D-4199-838C-7A805427CE42}.Debug|x86.Build.0 = Debug|Any CPU + {443B8959-7F3D-4199-838C-7A805427CE42}.Release|Any CPU.ActiveCfg = Debug|Any CPU + {443B8959-7F3D-4199-838C-7A805427CE42}.Release|Any CPU.Build.0 = Debug|Any CPU + {443B8959-7F3D-4199-838C-7A805427CE42}.Release|x64.ActiveCfg = Debug|Any CPU + {443B8959-7F3D-4199-838C-7A805427CE42}.Release|x64.Build.0 = Debug|Any CPU + {443B8959-7F3D-4199-838C-7A805427CE42}.Release|x86.ActiveCfg = Debug|Any CPU + {443B8959-7F3D-4199-838C-7A805427CE42}.Release|x86.Build.0 = Debug|Any CPU {91BAC03D-BBBB-403C-A8B0-2F70497F39BA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {91BAC03D-BBBB-403C-A8B0-2F70497F39BA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {91BAC03D-BBBB-403C-A8B0-2F70497F39BA}.Debug|x86.ActiveCfg = Debug|x86 - {91BAC03D-BBBB-403C-A8B0-2F70497F39BA}.Debug|x86.Build.0 = Debug|x86 - {91BAC03D-BBBB-403C-A8B0-2F70497F39BA}.Release|Any CPU.ActiveCfg = Release|Any CPU - {91BAC03D-BBBB-403C-A8B0-2F70497F39BA}.Release|Any CPU.Build.0 = Release|Any CPU - {91BAC03D-BBBB-403C-A8B0-2F70497F39BA}.Release|x86.ActiveCfg = Release|x86 - {91BAC03D-BBBB-403C-A8B0-2F70497F39BA}.Release|x86.Build.0 = Release|x86 + {91BAC03D-BBBB-403C-A8B0-2F70497F39BA}.Debug|x64.ActiveCfg = Debug|Any CPU + {91BAC03D-BBBB-403C-A8B0-2F70497F39BA}.Debug|x64.Build.0 = Debug|Any CPU + {91BAC03D-BBBB-403C-A8B0-2F70497F39BA}.Debug|x86.ActiveCfg = Debug|Any CPU + {91BAC03D-BBBB-403C-A8B0-2F70497F39BA}.Debug|x86.Build.0 = Debug|Any CPU + {91BAC03D-BBBB-403C-A8B0-2F70497F39BA}.Release|Any CPU.ActiveCfg = Debug|Any CPU + {91BAC03D-BBBB-403C-A8B0-2F70497F39BA}.Release|Any CPU.Build.0 = Debug|Any CPU + {91BAC03D-BBBB-403C-A8B0-2F70497F39BA}.Release|x64.ActiveCfg = Debug|Any CPU + {91BAC03D-BBBB-403C-A8B0-2F70497F39BA}.Release|x64.Build.0 = Debug|Any CPU + {91BAC03D-BBBB-403C-A8B0-2F70497F39BA}.Release|x86.ActiveCfg = Debug|Any CPU + {91BAC03D-BBBB-403C-A8B0-2F70497F39BA}.Release|x86.Build.0 = Debug|Any CPU + {0A18B029-4108-49F5-904F-09369254CC28}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {0A18B029-4108-49F5-904F-09369254CC28}.Debug|x64.ActiveCfg = Debug|x64 + {0A18B029-4108-49F5-904F-09369254CC28}.Debug|x64.Build.0 = Debug|x64 + {0A18B029-4108-49F5-904F-09369254CC28}.Debug|x86.ActiveCfg = Debug|Win32 + {0A18B029-4108-49F5-904F-09369254CC28}.Release|Any CPU.ActiveCfg = Debug|Win32 + {0A18B029-4108-49F5-904F-09369254CC28}.Release|x64.ActiveCfg = Debug|Win32 + {0A18B029-4108-49F5-904F-09369254CC28}.Release|x86.ActiveCfg = Debug|Win32 + {AF8B71B3-88B6-4DDA-8442-192079D160DE}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {AF8B71B3-88B6-4DDA-8442-192079D160DE}.Debug|Any CPU.Build.0 = Debug|Win32 + {AF8B71B3-88B6-4DDA-8442-192079D160DE}.Debug|x64.ActiveCfg = Debug|x64 + {AF8B71B3-88B6-4DDA-8442-192079D160DE}.Debug|x64.Build.0 = Debug|x64 + {AF8B71B3-88B6-4DDA-8442-192079D160DE}.Debug|x86.ActiveCfg = Debug|Win32 + {AF8B71B3-88B6-4DDA-8442-192079D160DE}.Debug|x86.Build.0 = Debug|Win32 + {AF8B71B3-88B6-4DDA-8442-192079D160DE}.Release|Any CPU.ActiveCfg = Debug|Win32 + {AF8B71B3-88B6-4DDA-8442-192079D160DE}.Release|Any CPU.Build.0 = Debug|Win32 + {AF8B71B3-88B6-4DDA-8442-192079D160DE}.Release|x64.ActiveCfg = Debug|Win32 + {AF8B71B3-88B6-4DDA-8442-192079D160DE}.Release|x64.Build.0 = Debug|Win32 + {AF8B71B3-88B6-4DDA-8442-192079D160DE}.Release|x86.ActiveCfg = Debug|Win32 + {AF8B71B3-88B6-4DDA-8442-192079D160DE}.Release|x86.Build.0 = Debug|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE