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