Skip to content

Commit

Permalink
Tweaked OS Detection project structure and added os check for PT Run (#…
Browse files Browse the repository at this point in the history
…4253)

* Tweaked OS Detection project structure and added check in Launcher

* Reverted formatter change to minimize diff
  • Loading branch information
arjunbalgovind authored Jun 11, 2020
1 parent 67c8d80 commit fa7e4cc
Show file tree
Hide file tree
Showing 5 changed files with 56 additions and 46 deletions.
2 changes: 2 additions & 0 deletions src/common/common.vcxproj
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,7 @@
<ClInclude Include="keyboard_layout.h" />
<ClInclude Include="keyboard_layout_impl.h" />
<ClInclude Include="notifications.h" />
<ClInclude Include="os-detection\os-detect.h" />
<ClInclude Include="RestartManagement.h" />
<ClInclude Include="shared_constants.h" />
<ClInclude Include="timeutil.h" />
Expand Down Expand Up @@ -159,6 +160,7 @@
<ClCompile Include="monitors.cpp" />
<ClCompile Include="notifications.cpp" />
<ClCompile Include="on_thread_executor.cpp" />
<ClCompile Include="os-detection\os-detect.cpp" />
<ClCompile Include="pch.cpp">
<PrecompiledHeader Condition="'$(CIBuild)'!='true'">Create</PrecompiledHeader>
</ClCompile>
Expand Down
6 changes: 6 additions & 0 deletions src/common/common.vcxproj.filters
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,9 @@
<ClInclude Include="two_way_pipe_message_ipc.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="os-detection\os-detect.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="RestartManagement.h">
<Filter>Header Files</Filter>
</ClInclude>
Expand Down Expand Up @@ -183,6 +186,9 @@
<ClCompile Include="two_way_pipe_message_ipc.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="os-detection\os-detect.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="RestartManagement.cpp">
<Filter>Source Files</Filter>
</ClCompile>
Expand Down
89 changes: 47 additions & 42 deletions src/modules/launcher/Microsoft.Launcher/dllmain.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
#include <common/common.h>
#include "trace.h"
#include "resource.h"
#include <common/os-detection/os-detect.h>

extern "C" IMAGE_DOS_HEADER __ImageBase;

Expand Down Expand Up @@ -132,60 +133,64 @@ class Microsoft_Launcher : public PowertoyModuleIface {
// Enable the powertoy
virtual void enable()
{
unsigned long powertoys_pid = GetCurrentProcessId();

if (!is_process_elevated(false))
// Start PowerLauncher.exe only if the OS is 19H1 or higher
if (UseNewSettings())
{
std::wstring executable_args = L"";
executable_args.append(std::to_wstring(powertoys_pid));
unsigned long powertoys_pid = GetCurrentProcessId();

SHELLEXECUTEINFOW sei{ sizeof(sei) };
sei.fMask = { SEE_MASK_NOCLOSEPROCESS | SEE_MASK_FLAG_NO_UI };
sei.lpFile = L"modules\\launcher\\PowerLauncher.exe";
sei.nShow = SW_SHOWNORMAL;
sei.lpParameters = executable_args.data();
ShellExecuteExW(&sei);
if (!is_process_elevated(false))
{
std::wstring executable_args = L"";
executable_args.append(std::to_wstring(powertoys_pid));

m_hProcess = sei.hProcess;
}
else
{
std::wstring action_runner_path = get_module_folderpath();

std::wstring params;
params += L"-run-non-elevated ";
params += L"-target modules\\launcher\\PowerLauncher.exe ";
params += L"-pidFile ";
params += POWER_LAUNCHER_PID_SHARED_FILE;
params += L" " + std::to_wstring(powertoys_pid) + L" ";

action_runner_path += L"\\action_runner.exe";
// Set up the shared file from which to retrieve the PID of PowerLauncher
HANDLE hMapFile = CreateFileMappingW(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, sizeof(DWORD), POWER_LAUNCHER_PID_SHARED_FILE);
if (hMapFile)
SHELLEXECUTEINFOW sei{ sizeof(sei) };
sei.fMask = { SEE_MASK_NOCLOSEPROCESS | SEE_MASK_FLAG_NO_UI };
sei.lpFile = L"modules\\launcher\\PowerLauncher.exe";
sei.nShow = SW_SHOWNORMAL;
sei.lpParameters = executable_args.data();
ShellExecuteExW(&sei);

m_hProcess = sei.hProcess;
}
else
{
PDWORD pidBuffer = reinterpret_cast<PDWORD>(MapViewOfFile(hMapFile, FILE_MAP_ALL_ACCESS, 0, 0, sizeof(DWORD)));
if (pidBuffer)
std::wstring action_runner_path = get_module_folderpath();

std::wstring params;
params += L"-run-non-elevated ";
params += L"-target modules\\launcher\\PowerLauncher.exe ";
params += L"-pidFile ";
params += POWER_LAUNCHER_PID_SHARED_FILE;
params += L" " + std::to_wstring(powertoys_pid) + L" ";

action_runner_path += L"\\action_runner.exe";
// Set up the shared file from which to retrieve the PID of PowerLauncher
HANDLE hMapFile = CreateFileMappingW(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, sizeof(DWORD), POWER_LAUNCHER_PID_SHARED_FILE);
if (hMapFile)
{
*pidBuffer = 0;
m_hProcess = NULL;

if (run_non_elevated(action_runner_path, params, pidBuffer))
PDWORD pidBuffer = reinterpret_cast<PDWORD>(MapViewOfFile(hMapFile, FILE_MAP_ALL_ACCESS, 0, 0, sizeof(DWORD)));
if (pidBuffer)
{
const int maxRetries = 80;
for (int retry = 0; retry < maxRetries; ++retry)
*pidBuffer = 0;
m_hProcess = NULL;

if (run_non_elevated(action_runner_path, params, pidBuffer))
{
Sleep(50);
DWORD pid = *pidBuffer;
if (pid)
const int maxRetries = 80;
for (int retry = 0; retry < maxRetries; ++retry)
{
m_hProcess = OpenProcess(PROCESS_TERMINATE, FALSE, pid);
break;
Sleep(50);
DWORD pid = *pidBuffer;
if (pid)
{
m_hProcess = OpenProcess(PROCESS_TERMINATE, FALSE, pid);
break;
}
}
}
}
CloseHandle(hMapFile);
}
CloseHandle(hMapFile);
}
}

Expand Down
3 changes: 0 additions & 3 deletions src/runner/runner.vcxproj
Original file line number Diff line number Diff line change
Expand Up @@ -238,9 +238,6 @@
<ProjectReference Include="..\common\common.vcxproj">
<Project>{74485049-c722-400f-abe5-86ac52d929b3}</Project>
</ProjectReference>
<ProjectReference Include="..\common\os-detection\os-detection.vcxproj">
<Project>{e6410bfc-b341-498c-8c67-312c20cdd8d5}</Project>
</ProjectReference>
<ProjectReference Include="..\common\updating\updating.vcxproj">
<Project>{17da04df-e393-4397-9cf0-84dabe11032e}</Project>
</ProjectReference>
Expand Down
2 changes: 1 addition & 1 deletion src/runner/settings_window.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@

#include <common/json.h>
#include <common\settings_helpers.cpp>
#include <os-detect.h>
#include <common/os-detection/os-detect.h>

#define BUFSIZE 1024

Expand Down

0 comments on commit fa7e4cc

Please sign in to comment.