Files
deskflow/src/lib/platform/MSWindowsProcess.h
sithlord48 c4c2f7f37f feat: begin to use QStrings for strings
feat: get windows building with the UNICODE forced by using Qt
refactor: remove ARCHString use QString to convert to / from utf8
build: (arch) link to common
build: (base) link to arch
build: (io) Link to common
build: (client) link to common
build: (server) link to common
fix: Append to log file instead of creating a new one each log line
refactor: Trim cipher description for neater log output
fix: Update log messages to use wide string format for Unicode support
fix: Correct event creation to use wide string for Unicode compatibility
refactor: Use QStringDecoder for UTF-8 handling on Windows Daemon child process
fix: Use correct wide type for Win32 consts
2025-09-10 18:15:19 +01:00

56 lines
1.3 KiB
C++

/*
* Deskflow -- mouse and keyboard sharing utility
* SPDX-FileCopyrightText: (C) 2025 Symless Ltd.
* SPDX-License-Identifier: GPL-2.0-only WITH LicenseRef-OpenSSL-Exception
*/
#pragma once
#define WIN32_LEAN_AND_MEAN
#include <Windows.h>
#include <string>
namespace deskflow::platform {
namespace { // NOSONAR -- Deliberate anonymous
const auto kDefaultShutdownTimeout = 10;
}
class MSWindowsProcess
{
public:
explicit MSWindowsProcess(const std::wstring &command, HANDLE stdOutput = nullptr, HANDLE stdError = nullptr);
~MSWindowsProcess();
BOOL startInForeground();
BOOL startAsUser(HANDLE userToken, LPSECURITY_ATTRIBUTES sa);
void shutdown(int timeout = kDefaultShutdownTimeout);
DWORD waitForExit();
void createPipes();
std::wstring readStdOutput();
std::wstring readStdError();
PROCESS_INFORMATION info() const
{
return m_info;
}
static void shutdown(HANDLE handle, DWORD pid, int timeout = kDefaultShutdownTimeout);
private:
void setStartupInfo(STARTUPINFO &si);
static std::wstring readOutput(HANDLE handle);
std::wstring m_command;
HANDLE m_stdOutput;
HANDLE m_stdError;
HANDLE m_outputPipe = nullptr;
HANDLE m_errorPipe = nullptr;
PROCESS_INFORMATION m_info;
BOOL m_createProcessResult = FALSE;
};
} // namespace deskflow::platform