UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
WindowsPlatformProcess.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "CoreTypes.h"
9
10class FEvent;
11class FRunnableThread;
12
14
15
16struct FProcHandle : public TProcHandle<Windows::HANDLE, nullptr>
17{
18public:
21 : TProcHandle()
22 {}
23
27 {}
28};
29
30
36{
41 {
42 virtual void Lock();
43 virtual bool TryLock(uint64 NanosecondsToWait);
44 virtual void Unlock();
45
48
51
54
56 virtual ~FWindowsSemaphore();
57
58 protected:
59
62 };
63
64 struct FProcEnumInfo;
65
70 {
71 public:
72 // Constructor
76
77 // Destructor
79
80 // Gets current process enumerator info.
82
88 CORE_API bool MoveNext();
89 private:
90 // Process info structure for current process.
91 Windows::PROCESSENTRY32* CurrentEntry;
92
93 // Processes state snapshot handle.
94 Windows::HANDLE SnapshotHandle;
95 };
96
101 {
103 public:
104 // Destructor
106
107 // Gets process PID.
108 CORE_API uint32 GetPID() const;
109
110 // Gets parent process PID.
112
113 // Gets process name. I.e. exec name.
114 CORE_API FString GetName() const;
115
116 // Gets process full image path. I.e. full path of the exec file.
117 CORE_API FString GetFullPath() const;
118
119 private:
120 // Private constructor.
122
123 // Process info structure.
125 };
126
127public:
128
130 static CORE_API bool IsProcessAffinitySet();
131
132 // FGenericPlatformProcess interface
133
134 static CORE_API void* GetDllHandle( const TCHAR* Filename );
135 static CORE_API void FreeDllHandle( void* DllHandle );
136 static CORE_API void* GetDllExport( void* DllHandle, const TCHAR* ProcName );
137 static CORE_API void AddDllDirectory(const TCHAR* Directory);
139 static CORE_API void PushDllDirectory(const TCHAR* Directory);
140 static CORE_API void PopDllDirectory(const TCHAR* Directory);
144 static CORE_API void SetThreadName( const TCHAR* ThreadName );
146 static CORE_API const TCHAR* BaseDir();
147 static CORE_API const TCHAR* UserDir();
148 static CORE_API const TCHAR* UserTempDir();
149 static CORE_API const TCHAR* UserSettingsDir();
150 static CORE_API const TCHAR* UserHomeDir();
152 static CORE_API const TCHAR* ApplicationSettingsDir();
153 static CORE_API FString GetApplicationSettingsDir(const ApplicationSettingsContext& Settings);
154 static CORE_API const TCHAR* WindowsSystemDir();
155 static CORE_API const TCHAR* ComputerName();
156 static CORE_API const TCHAR* UserName(bool bOnlyAlphaNumeric = true);
158 static CORE_API FString GetCurrentWorkingDirectory();
159 static CORE_API const FString ShaderWorkingDir();
160 static CORE_API const TCHAR* ExecutablePath();
161 static CORE_API const TCHAR* ExecutableName(bool bRemoveExtension = true);
162 static CORE_API FString GenerateApplicationPath( const FString& AppName, EBuildConfiguration BuildConfiguration);
163 static CORE_API const TCHAR* GetArchitectureSuffix();
164 static CORE_API const TCHAR* GetModuleExtension();
165 static CORE_API const TCHAR* GetBinariesSubdirectory();
166 static CORE_API const FString GetModulesDirectory();
167 static CORE_API FProcHandle CreateProc(const TCHAR* URL, const TCHAR* Parms, bool bLaunchDetached, bool bLaunchHidden, bool bLaunchReallyHidden, uint32* OutProcessID, int32 PriorityModifier, const TCHAR* OptionalWorkingDirectory, void* PipeWriteChild, void* PipeReadChild = nullptr);
168 static CORE_API FProcHandle CreateProc(const TCHAR* URL, const TCHAR* Parms, bool bLaunchDetached, bool bLaunchHidden, bool bLaunchReallyHidden, uint32* OutProcessID, int32 PriorityModifier, const TCHAR* OptionalWorkingDirectory, void* PipeWriteChild, void* PipeReadChild, void* PipeStdErrChild);
170 static CORE_API bool SetProcPriority(FProcHandle & InProcHandle, int32 PriorityModifier);
172 static CORE_API bool IsProcRunning( FProcHandle & ProcessHandle );
173 static CORE_API void WaitForProc( FProcHandle & ProcessHandle );
174 static CORE_API void CloseProc( FProcHandle & ProcessHandle );
175 static CORE_API void TerminateProc( FProcHandle & ProcessHandle, bool KillTree = false );
177 FProcHandle& ProcessHandle,
178 TFunctionRef<bool(uint32 ProcessId, const TCHAR* ApplicationName)> Predicate);
179 static CORE_API bool GetProcReturnCode( FProcHandle & ProcHandle, int32* ReturnCode );
182 static CORE_API bool IsApplicationRunning( uint32 ProcessId );
183 static CORE_API bool IsApplicationRunning( const TCHAR* ProcName );
184 static CORE_API FString GetApplicationName( uint32 ProcessId );
185 static CORE_API bool ExecProcess(const TCHAR* URL, const TCHAR* Params, int32* OutReturnCode, FString* OutStdOut, FString* OutStdErr, const TCHAR* OptionalWorkingDirectory = NULL, bool bShouldEndWithParentProcess = false);
186 static CORE_API bool ExecElevatedProcess(const TCHAR* URL, const TCHAR* Params, int32* OutReturnCode);
187 static CORE_API FProcHandle CreateElevatedProcess(const TCHAR* URL, const TCHAR* Params);
188 static CORE_API bool LaunchFileInDefaultExternalApplication( const TCHAR* FileName, const TCHAR* Parms = NULL, ELaunchVerb::Type Verb = ELaunchVerb::Open, bool bPromptToOpenOnFailure = true );
189 static CORE_API void ExploreFolder( const TCHAR* FilePath );
190 static CORE_API bool ResolveNetworkPath( FString InUNCPath, FString& OutPath );
191 static CORE_API void Sleep(float Seconds);
192 static CORE_API void SleepNoStats(float Seconds);
193 [[noreturn]] static CORE_API void SleepInfinite();
194 static CORE_API void YieldThread();
195 UE_DEPRECATED(5.0, "Please use GetSynchEventFromPool to create a new event, and ReturnSynchEventToPool to release the event.")
196 static CORE_API class FEvent* CreateSynchEvent(bool bIsManualReset = false);
198 static CORE_API void ClosePipe( void* ReadPipe, void* WritePipe );
199 static CORE_API bool CreatePipe(void*& ReadPipe, void*& WritePipe, bool bWritePipeLocal = false);
200 static CORE_API FString ReadPipe( void* ReadPipe );
202 static CORE_API bool WritePipe(void* WritePipe, const FString& Message, FString* OutWritten = nullptr);
203 static CORE_API bool WritePipe(void* WritePipe, const uint8* Data, const int32 DataLength, int32* OutDataLength = nullptr);
213
218
228
229 /*
230 * Allows us to add an alternative route for launching URLs
231 */
233 static CORE_API bool CanLaunchURL(const TCHAR* URL);
234 static CORE_API void LaunchURL(const TCHAR* URL, const TCHAR* Parms, FString* Error);
235
237
246
247private:
248
249 static FProcHandle CreateProcInternal(const TCHAR* URL, const TCHAR* Parms, bool bLaunchDetached, bool bLaunchHidden, bool bLaunchReallyHidden, uint32* OutProcessID, int32 PriorityModifier, const TCHAR* OptionalWorkingDirectory, void* PipeWriteChild, void* PipeReadChild, void* PipeStdErrChild, bool bInheritHandles);
250
251 static void LaunchURLInternal(const TCHAR* URL, const TCHAR* Parms, FString* Error);
252
257 static TArray<FString> DllDirectoryStack;
258
262 static TArray<FString> DllDirectories;
263
267 static TMap<FName, TArray<FString>> SearchPathDllCache;
268
276 static void* LoadLibraryWithSearchPaths(const FString& FileName, TConstArrayView<FString> SearchPaths);
277
285 static bool ResolveImport(const FString& Name, TConstArrayView<FString> SearchPaths, FString& OutFileName);
286
295 static void ResolveMissingImportsRecursive(const FString& FileName, TConstArrayView<FString> SearchPaths, TArray<FString>& ImportFileNames, TSet<FString>& VisitedImportNames);
296};
297
299
#define NULL
Definition oodle2base.h:134
#define UE_DEPRECATED(Version, Message)
Definition CoreMiscDefines.h:302
FPlatformTypes::SIZE_T SIZE_T
An unsigned integer the same size as a pointer, the same as UPTRINT.
Definition Platform.h:1150
FPlatformTypes::TCHAR TCHAR
Either ANSICHAR or WIDECHAR, depending on whether the platform supports wide characters or the requir...
Definition Platform.h:1135
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
#define UE_FORCEINLINE_HINT
Definition Platform.h:723
FPlatformTypes::uint64 uint64
A 64-bit unsigned integer.
Definition Platform.h:1117
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define DECLARE_DELEGATE_OneParam(DelegateName, Param1Type)
Definition DelegateCombinations.h:48
EThreadPriority
Definition GenericPlatformAffinity.h:26
EBuildConfiguration
Definition GenericPlatformMisc.h:59
uint8_t uint8
Definition binka_ue_file_header.h:8
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition Event.h:21
Definition NameTypes.h:617
Definition RunnableThread.h:20
Definition WindowsPlatformProcess.h:70
CORE_API FProcEnumerator()
Definition WindowsPlatformProcess.cpp:2577
FProcEnumerator(const FProcEnumerator &)=delete
CORE_API bool MoveNext()
Definition WindowsPlatformProcess.cpp:2601
CORE_API ~FProcEnumerator()
Definition WindowsPlatformProcess.cpp:2584
FProcEnumerator & operator=(const FProcEnumerator &)=delete
CORE_API FProcEnumInfo GetCurrent() const
Definition WindowsPlatformProcess.cpp:2613
Definition GenericPlatformProcess.h:223
Definition Array.h:670
Definition AssetRegistryState.h:50
Definition UnrealString.h.inl:34
Definition SharedPointer.h:692
Type
Definition GenericPlatformProcess.h:67
@ Open
Definition GenericPlatformProcess.h:69
Definition MinimalWindowsApi.h:62
tagPROCESSENTRY32W PROCESSENTRY32
Definition MinimalWindowsApi.h:88
void * HANDLE
Definition MinimalWindowsApi.h:78
@ false
Definition radaudio_common.h:23
Definition AndroidPlatformProcess.h:30
Definition GenericPlatformProcess.h:414
Definition GenericPlatformProcess.h:254
Definition GenericPlatformProcess.h:249
Definition GenericPlatformProcess.h:130
Definition AndroidPlatformProcess.h:13
UE_FORCEINLINE_HINT constexpr FProcHandle()
Definition AndroidPlatformProcess.h:16
Definition WindowsPlatformProcess.h:101
CORE_API uint32 GetPID() const
Definition WindowsPlatformProcess.cpp:2618
CORE_API FString GetFullPath() const
Definition WindowsPlatformProcess.cpp:2633
CORE_API FString GetName() const
Definition WindowsPlatformProcess.cpp:2628
CORE_API uint32 GetParentPID() const
Definition WindowsPlatformProcess.cpp:2623
CORE_API ~FProcEnumInfo()
Definition WindowsPlatformProcess.cpp:2596
Definition WindowsPlatformProcess.h:41
Windows::HANDLE Semaphore
Definition WindowsPlatformProcess.h:61
Windows::HANDLE GetSemaphore()
Definition WindowsPlatformProcess.h:47
virtual bool TryLock(uint64 NanosecondsToWait)
Definition WindowsPlatformProcess.cpp:2116
virtual void Lock()
Definition WindowsPlatformProcess.cpp:2102
virtual void Unlock()
Definition WindowsPlatformProcess.cpp:2133
virtual ~FWindowsSemaphore()
Definition WindowsPlatformProcess.cpp:2097
FWindowsSemaphore(const FString &InName, Windows::HANDLE InSemaphore)
Definition WindowsPlatformProcess.h:36
static CORE_API bool SetProcessAffinity(uint32 NumCoresForAffinity, bool bPhysicalCoresOnly)
Definition WindowsPlatformProcess.cpp:105
static CORE_API void PopDllDirectory(const TCHAR *Directory)
Definition WindowsPlatformProcess.cpp:300
static CORE_API const TCHAR * GetModuleExtension()
Definition WindowsPlatformProcess.cpp:1724
static CORE_API bool GetPerFrameProcessorUsage(uint32 ProcessId, float &ProcessUsageFraction, float &IdleUsageFraction)
Definition WindowsPlatformProcess.cpp:875
static CORE_API void LaunchURL(const TCHAR *URL, const TCHAR *Parms, FString *Error)
Definition WindowsPlatformProcess.cpp:417
static CORE_API void * GetDllHandle(const TCHAR *Filename)
Definition WindowsPlatformProcess.cpp:204
static CORE_API class FEvent * CreateSynchEvent(bool bIsManualReset=false)
Definition WindowsPlatformProcess.cpp:1890
static CORE_API bool Daemonize()
Definition WindowsPlatformProcess.cpp:2227
static CORE_API FString GetCurrentWorkingDirectory()
Definition WindowsPlatformProcess.cpp:1655
static CORE_API const TCHAR * UserSettingsDir()
Definition WindowsPlatformProcess.cpp:1443
static CORE_API class FRunnableThread * CreateRunnableThread()
Definition WindowsPlatformProcess.cpp:1950
static CORE_API void SetThreadName(const TCHAR *ThreadName)
Definition WindowsPlatformProcess.cpp:2768
static CORE_API const TCHAR * BaseDir()
Definition WindowsPlatformProcess.cpp:1310
static CORE_API void SleepNoStats(float Seconds)
Definition WindowsPlatformProcess.cpp:1862
static CORE_API bool IsProcessAffinitySet()
Definition WindowsPlatformProcess.cpp:170
static CORE_API FString GetApplicationSettingsDir(const ApplicationSettingsContext &Settings)
Definition WindowsPlatformProcess.cpp:1519
static CORE_API void TerminateProc(FProcHandle &ProcessHandle, bool KillTree=false)
Definition WindowsPlatformProcess.cpp:743
static CORE_API bool CreatePipe(void *&ReadPipe, void *&WritePipe, bool bWritePipeLocal=false)
Definition WindowsPlatformProcess.cpp:1967
static CORE_API bool IsApplicationRunning(uint32 ProcessId)
Definition WindowsPlatformProcess.cpp:975
static CORE_API void Sleep(float Seconds)
Definition WindowsPlatformProcess.cpp:1855
static CORE_API void PushDllDirectory(const TCHAR *Directory)
Definition WindowsPlatformProcess.cpp:292
static CORE_API void ClosePipe(void *ReadPipe, void *WritePipe)
Definition WindowsPlatformProcess.cpp:1955
static CORE_API void TeardownAudioThread()
Definition WindowsPlatformProcess.cpp:2238
static CORE_API bool GetProcReturnCode(FProcHandle &ProcHandle, int32 *ReturnCode)
Definition WindowsPlatformProcess.cpp:840
static CORE_API void YieldThread()
Definition WindowsPlatformProcess.cpp:1883
static CORE_API void SetThreadAffinityMask(uint64 AffinityMask)
Definition WindowsPlatformProcess.cpp:822
static CORE_API FProcHandle CreateElevatedProcess(const TCHAR *URL, const TCHAR *Params)
Definition WindowsPlatformProcess.cpp:1291
static CORE_API uint32 GetCurrentCoreNumber()
Definition WindowsPlatformProcess.cpp:817
static CORE_API FLaunchURLOverride LaunchURLOverrideDelegate
Definition WindowsPlatformProcess.h:232
static CORE_API bool DeleteInterprocessSynchObject(FSemaphore *Object)
Definition WindowsPlatformProcess.cpp:2197
static CORE_API bool ShouldExpectLowIntegrityLevel()
Definition WindowsPlatformProcess.cpp:2699
static CORE_API const FString GetModulesDirectory()
Definition WindowsPlatformProcess.cpp:1738
static CORE_API uint32 GetCurrentProcessId()
Definition WindowsPlatformProcess.cpp:812
static CORE_API void SleepInfinite()
Definition WindowsPlatformProcess.cpp:1875
static CORE_API const TCHAR * GetArchitectureSuffix()
Definition WindowsPlatformProcess.cpp:274
static CORE_API void AddDllDirectory(const TCHAR *Directory)
Definition WindowsPlatformProcess.cpp:175
static CORE_API void FreeDllHandle(void *DllHandle)
Definition WindowsPlatformProcess.cpp:252
static CORE_API const TCHAR * ComputerName()
Definition WindowsPlatformProcess.cpp:1595
static CORE_API void SetupGameThread()
Definition WindowsPlatformProcess.cpp:2638
static CORE_API bool ReadPipeToArray(void *ReadPipe, TArray< uint8 > &Output)
Definition WindowsPlatformProcess.cpp:2008
static CORE_API bool IsProcRunning(FProcHandle &ProcessHandle)
Definition WindowsPlatformProcess.cpp:718
static CORE_API bool ResolveNetworkPath(FString InUNCPath, FString &OutPath)
Definition WindowsPlatformProcess.cpp:1816
static CORE_API const TCHAR * GetBinariesSubdirectory()
Definition WindowsPlatformProcess.cpp:1729
static CORE_API const TCHAR * UserTempDir()
Definition WindowsPlatformProcess.cpp:1409
static CORE_API const FString ShaderWorkingDir()
Definition WindowsPlatformProcess.cpp:1679
static CORE_API bool ExecProcess(const TCHAR *URL, const TCHAR *Params, int32 *OutReturnCode, FString *OutStdOut, FString *OutStdErr, const TCHAR *OptionalWorkingDirectory=NULL, bool bShouldEndWithParentProcess=false)
Definition WindowsPlatformProcess.cpp:1068
static CORE_API const TCHAR * WindowsSystemDir()
Definition WindowsPlatformProcess.cpp:1577
static CORE_API void CloseProc(FProcHandle &ProcessHandle)
Definition WindowsPlatformProcess.cpp:734
static CORE_API const TCHAR * UserHomeDir()
Definition WindowsPlatformProcess.cpp:1462
static CORE_API void ExploreFolder(const TCHAR *FilePath)
Definition WindowsPlatformProcess.cpp:1791
static CORE_API bool IsFirstInstance()
Definition WindowsPlatformProcess.cpp:2643
static CORE_API void TerminateProcTreeWithPredicate(FProcHandle &ProcessHandle, TFunctionRef< bool(uint32 ProcessId, const TCHAR *ApplicationName)> Predicate)
Definition WindowsPlatformProcess.cpp:804
static CORE_API bool WritePipe(void *WritePipe, const FString &Message, FString *OutWritten=nullptr)
Definition WindowsPlatformProcess.cpp:2033
static CORE_API const TCHAR * UserName(bool bOnlyAlphaNumeric=true)
Definition WindowsPlatformProcess.cpp:1606
static CORE_API const TCHAR * ExecutablePath()
Definition WindowsPlatformProcess.cpp:1685
static CORE_API FProcHandle OpenProcess(uint32 ProcessID)
Definition WindowsPlatformProcess.cpp:713
static CORE_API void GetDllDirectories(TArray< FString > &OutDllDirectories)
Definition WindowsPlatformProcess.cpp:199
static CORE_API FSemaphore * NewInterprocessSynchObject(const FString &Name, bool bCreate, uint32 MaxLocks=1)
Definition WindowsPlatformProcess.cpp:2145
static CORE_API bool GetApplicationMemoryUsage(uint32 ProcessId, SIZE_T *OutMemoryUsage)
Definition WindowsPlatformProcess.cpp:854
static CORE_API void SetCurrentWorkingDirectoryToBaseDir()
Definition WindowsPlatformProcess.cpp:1635
static CORE_API bool LaunchFileInDefaultExternalApplication(const TCHAR *FileName, const TCHAR *Parms=NULL, ELaunchVerb::Type Verb=ELaunchVerb::Open, bool bPromptToOpenOnFailure=true)
Definition WindowsPlatformProcess.cpp:1762
static CORE_API bool ExecElevatedProcess(const TCHAR *URL, const TCHAR *Params, int32 *OutReturnCode)
Definition WindowsPlatformProcess.cpp:1266
static CORE_API bool SetProcPriority(FProcHandle &InProcHandle, int32 PriorityModifier)
Definition WindowsPlatformProcess.cpp:693
static CORE_API void ReadFromPipes(FString *OutStrings[], Windows::HANDLE InPipes[], int32 PipeCount)
Definition WindowsPlatformProcess.cpp:1052
static CORE_API FProcHandle CreateProc(const TCHAR *URL, const TCHAR *Parms, bool bLaunchDetached, bool bLaunchHidden, bool bLaunchReallyHidden, uint32 *OutProcessID, int32 PriorityModifier, const TCHAR *OptionalWorkingDirectory, void *PipeWriteChild, void *PipeReadChild=nullptr)
Definition WindowsPlatformProcess.cpp:465
static CORE_API TSharedPtr< IProcessSentinel > CreateProcessSentinelObject()
Definition WindowsPlatformProcess.cpp:2859
static CORE_API const TCHAR * UserDir()
Definition WindowsPlatformProcess.cpp:1390
static CORE_API const TCHAR * ApplicationSettingsDir()
Definition WindowsPlatformProcess.cpp:1500
static CORE_API FString GenerateApplicationPath(const FString &AppName, EBuildConfiguration BuildConfiguration)
Definition WindowsPlatformProcess.cpp:258
static CORE_API FString ReadPipe(void *ReadPipe)
Definition WindowsPlatformProcess.cpp:1984
static CORE_API void WaitForProc(FProcHandle &ProcessHandle)
Definition WindowsPlatformProcess.cpp:729
static CORE_API void * GetDllExport(void *DllHandle, const TCHAR *ProcName)
Definition WindowsPlatformProcess.cpp:285
static CORE_API const TCHAR * ExecutableName(bool bRemoveExtension=true)
Definition WindowsPlatformProcess.cpp:1698
static CORE_API const TCHAR * UserSettingsDirMediumIntegrity()
Definition WindowsPlatformProcess.cpp:1481
static CORE_API bool TryGetMemoryUsage(FProcHandle &ProcessHandle, FPlatformProcessMemoryStats &OutStats)
Definition WindowsPlatformProcess.cpp:2657
static CORE_API void SetThreadPriority(EThreadPriority NewPriority)
Definition WindowsPlatformProcess.cpp:2777
static CORE_API void SetupAudioThread()
Definition WindowsPlatformProcess.cpp:2233
static CORE_API bool CanLaunchURL(const TCHAR *URL)
Definition WindowsPlatformProcess.cpp:412
static CORE_API void CeaseBeingFirstInstance()
Releases locks that we held for IsFirstInstance check.
Definition WindowsPlatformProcess.cpp:2651
static CORE_API FString GetApplicationName(uint32 ProcessId)
Definition WindowsPlatformProcess.cpp:1028
Definition GenericPlatformProcess.h:90
void * HandleType
Definition GenericPlatformProcess.h:91
Definition Tuple.h:652
Definition GenericPlatformProcess.h:197