202 lines
9.8 KiB
MQL5
202 lines
9.8 KiB
MQL5
//+------------------------------------------------------------------+
| |||
//| processthreadsapi.mqh |
| |||
//| Copyright 2000-2025, MetaQuotes Ltd. |
| |||
//| https://www.mql5.com |
| |||
//+------------------------------------------------------------------+
| |||
#include <WinAPI\windef.mqh>
| |||
#include <WinAPI\winnt.mqh>
| |||
| |||
//+------------------------------------------------------------------+
| |||
//| |
| |||
//+------------------------------------------------------------------+
| |||
//---
| |||
enum THREAD_INFORMATION_CLASS
| |||
{
| |||
ThreadMemoryPriority,
| |||
ThreadAbsoluteCpuPriority,
| |||
ThreadDynamicCodePolicy,
| |||
ThreadPowerThrottling,
| |||
ThreadInformationClassMax
| |||
};
| |||
//---
| |||
enum PROCESS_INFORMATION_CLASS
| |||
{
| |||
ProcessMemoryPriority,
| |||
ProcessMemoryExhaustionInfo,
| |||
ProcessAppMemoryInfo,
| |||
ProcessInPrivateInfo,
| |||
ProcessPowerThrottling,
| |||
ProcessReservedValue1,
| |||
ProcessTelemetryCoverageInfo,
| |||
ProcessProtectionLevelInfo,
| |||
ProcessInformationClassMax
| |||
};
| |||
//---
| |||
enum PROCESS_MEMORY_EXHAUSTION_TYPE
| |||
{
| |||
PMETypeFailFastOnCommitFailure,
| |||
PMETypeMax
| |||
};
| |||
//+------------------------------------------------------------------+
| |||
//| |
| |||
//+------------------------------------------------------------------+
| |||
//---
| |||
struct PROCESS_INFORMATION
| |||
{
| |||
HANDLE hProcess;
| |||
HANDLE hThread;
| |||
uint dwProcessId;
| |||
uint dwThreadId;
| |||
};
| |||
//---
| |||
struct STARTUPINFOW
| |||
{
| |||
uint cb;
| |||
string lpReserved;
| |||
string lpDesktop;
| |||
string lpTitle;
| |||
uint dwX;
| |||
uint dwY;
| |||
uint dwXSize;
| |||
uint dwYSize;
| |||
uint dwXCountChars;
| |||
uint dwYCountChars;
| |||
uint dwFillAttribute;
| |||
uint dwFlags;
| |||
ushort wShowWindow;
| |||
ushort cbReserved2;
| |||
PVOID lpReserved2;
| |||
HANDLE hStdInput;
| |||
HANDLE hStdOutput;
| |||
HANDLE hStdError;
| |||
};
| |||
//---
| |||
struct MEMORY_PRIORITY_INFORMATION
| |||
{
| |||
uint MemoryPriority;
| |||
};
| |||
//---
| |||
struct THREAD_POWER_THROTTLING_STATE
| |||
{
| |||
uint Version;
| |||
uint ControlMask;
| |||
uint StateMask;
| |||
};
| |||
//---
| |||
struct APP_MEMORY_INFORMATION
| |||
{
| |||
ulong AvailableCommit;
| |||
ulong PrivateCommitUsage;
| |||
ulong PeakPrivateCommitUsage;
| |||
ulong TotalCommitUsage;
| |||
};
| |||
//---
| |||
struct PROCESS_MEMORY_EXHAUSTION_INFO
| |||
{
| |||
ushort Version;
| |||
ushort Reserved;
| |||
PROCESS_MEMORY_EXHAUSTION_TYPE Type;
| |||
ulong Value;
| |||
};
| |||
//---
| |||
struct PROCESS_POWER_THROTTLING_STATE
| |||
{
| |||
uint Version;
| |||
uint ControlMask;
| |||
uint StateMask;
| |||
};
| |||
//---
| |||
struct PROCESS_PROTECTION_LEVEL_INFORMATION
| |||
{
| |||
uint ProtectionLevel;
| |||
};
| |||
//+------------------------------------------------------------------+
| |||
//| |
| |||
//+------------------------------------------------------------------+
| |||
#import "kernel32.dll"
| |||
uint QueueUserAPC(PVOID apc,HANDLE thread,ulong data);
| |||
int GetProcessTimes(HANDLE process,FILETIME &creation_time,FILETIME &exit_time,FILETIME &kernel_time,FILETIME &user_time);
| |||
HANDLE GetCurrentProcess(void);
| |||
uint GetCurrentProcessId(void);
| |||
void ExitProcess(uint exit_code);
| |||
int TerminateProcess(HANDLE process,uint exit_code);
| |||
int GetExitCodeProcess(HANDLE process,uint &exit_code);
| |||
int SwitchToThread(void);
| |||
HANDLE CreateThread(PVOID thread_attributes,ulong stack_size,PVOID start_address,PVOID parameter,uint creation_flags,uint &thread_id);
| |||
HANDLE CreateRemoteThread(HANDLE process,PVOID thread_attributes,ulong stack_size,PVOID start_address,PVOID parameter,uint creation_flags,uint &thread_id);
| |||
HANDLE GetCurrentThread(void);
| |||
uint GetCurrentThreadId(void);
| |||
HANDLE OpenThread(uint desired_access,int inherit_handle,uint thread_id);
| |||
int SetThreadPriority(HANDLE thread,int priority);
| |||
int SetThreadPriorityBoost(HANDLE thread,int disable_priority_boost);
| |||
int GetThreadPriorityBoost(HANDLE thread,int &disable_priority_boost);
| |||
int GetThreadPriority(HANDLE thread);
| |||
void ExitThread(uint exit_code);
| |||
int TerminateThread(HANDLE thread,uint exit_code);
| |||
int GetExitCodeThread(HANDLE thread,uint &exit_code);
| |||
uint SuspendThread(HANDLE thread);
| |||
uint ResumeThread(HANDLE thread);
| |||
uint TlsAlloc(void);
| |||
PVOID TlsGetValue(uint tls_index);
| |||
int TlsSetValue(uint tls_index,PVOID tls_value);
| |||
int TlsFree(uint tls_index);
| |||
int CreateProcessW(const string application_name,string command_line,PVOID process_attributes,PVOID thread_attributes,int inherit_handles,uint creation_flags,PVOID environment,const string current_directory,STARTUPINFOW &startup_info,PROCESS_INFORMATION &process_information);
| |||
int SetProcessShutdownParameters(uint level,uint flags);
| |||
uint GetProcessVersion(uint process_id);
| |||
void GetStartupInfoW(STARTUPINFOW &startup_info);
| |||
int SetPriorityClass(HANDLE process,uint priority_class);
| |||
uint GetPriorityClass(HANDLE process);
| |||
int SetThreadStackGuarantee(ulong stack_size_in_bytes);
| |||
int ProcessIdToSessionId(uint process_id,uint &session_id);
| |||
uint GetProcessId(HANDLE process);
| |||
uint GetThreadId(HANDLE thread);
| |||
void FlushProcessWriteBuffers(void);
| |||
uint GetProcessIdOfThread(HANDLE thread);
| |||
int InitializeProcThreadAttributeList(PVOID attribute_list,uint attribute_count,uint flags,ulong &size);
| |||
void DeleteProcThreadAttributeList(PVOID attribute_list);
| |||
int SetProcessAffinityUpdateMode(HANDLE process,uint flags);
| |||
int QueryProcessAffinityUpdateMode(HANDLE process,uint &flags);
| |||
int UpdateProcThreadAttribute(PVOID attribute_list,uint flags,uint attribute,PVOID value,ulong size,PVOID previous_value,ulong &return_size);
| |||
HANDLE CreateRemoteThreadEx(HANDLE process,PVOID thread_attributes,ulong stack_size,PVOID start_address,PVOID parameter,uint creation_flags,PVOID attribute_list,uint &thread_id);
| |||
void GetCurrentThreadStackLimits(ulong &low_limit,ulong &high_limit);
| |||
int GetThreadContext(HANDLE thread,CONTEXT &context);
| |||
int GetProcessMitigationPolicy(HANDLE process,PROCESS_MITIGATION_POLICY mitigation_policy,PVOID buffer,ulong length);
| |||
int SetThreadContext(HANDLE thread,const CONTEXT &context);
| |||
int SetProcessMitigationPolicy(PROCESS_MITIGATION_POLICY mitigation_policy,PVOID buffer,ulong length);
| |||
int FlushInstructionCache(HANDLE process,const PVOID base_address,ulong size);
| |||
int GetThreadTimes(HANDLE thread,FILETIME &creation_time,FILETIME &exit_time,FILETIME &kernel_time,FILETIME &user_time);
| |||
HANDLE OpenProcess(uint desired_access,int inherit_handle,uint process_id);
| |||
int IsProcessorFeaturePresent(uint processor_feature);
| |||
int GetProcessHandleCount(HANDLE process,uint &handle_count);
| |||
uint GetCurrentProcessorNumber(void);
| |||
int SetThreadIdealProcessorEx(HANDLE thread,PROCESSOR_NUMBER &ideal_processor,PROCESSOR_NUMBER &previous_ideal_processor);
| |||
int GetThreadIdealProcessorEx(HANDLE thread,PROCESSOR_NUMBER &ideal_processor);
| |||
void GetCurrentProcessorNumberEx(PROCESSOR_NUMBER &proc_number);
| |||
int GetProcessPriorityBoost(HANDLE process,int &disable_priority_boost);
| |||
int SetProcessPriorityBoost(HANDLE process,int disable_priority_boost);
| |||
int GetThreadIOPendingFlag(HANDLE thread,int &io_is_pending);
| |||
int GetSystemTimes(FILETIME &idle_time,FILETIME &kernel_time,FILETIME &user_time);
| |||
int GetThreadInformation(HANDLE thread,THREAD_INFORMATION_CLASS thread_information_class,PVOID thread_information,uint thread_information_size);
| |||
int SetThreadInformation(HANDLE thread,THREAD_INFORMATION_CLASS thread_information_class,PVOID thread_information,uint thread_information_size);
| |||
int IsProcessCritical(HANDLE process,int &critical);
| |||
int SetProtectedPolicy(const GUID &policy_guid,ulong policy_value,ulong &old_policy_value);
| |||
int QueryProtectedPolicy(const GUID &policy_guid,ulong &policy_value);
| |||
uint SetThreadIdealProcessor(HANDLE thread,uint ideal_processor);
| |||
int SetProcessInformation(HANDLE process,PROCESS_INFORMATION_CLASS process_information_class,PVOID process_information,uint process_information_size);
| |||
int GetProcessInformation(HANDLE process,PROCESS_INFORMATION_CLASS process_information_class,PVOID process_information,uint process_information_size);
| |||
int GetSystemCpuSetInformation(SYSTEM_CPU_SET_INFORMATION &information,uint buffer_length,ulong returned_length,HANDLE process,uint flags);
| |||
int GetProcessDefaultCpuSets(HANDLE process,ulong &cpu_set_ids,uint cpu_set_id_count,ulong required_id_count);
| |||
int SetProcessDefaultCpuSets(HANDLE process,const uint &cpu_set_ids,uint cpu_set_id_count);
| |||
int GetThreadSelectedCpuSets(HANDLE thread,ulong &cpu_set_ids,uint cpu_set_id_count,ulong required_id_count);
| |||
int SetThreadSelectedCpuSets(HANDLE thread,const uint &cpu_set_ids,uint cpu_set_id_count);
| |||
int GetProcessShutdownParameters(uint &level,uint &flags);
| |||
int SetThreadDescription(HANDLE thread,const string thread_description);
| |||
int GetThreadDescription(HANDLE thread,string &thread_description);
| |||
#import
| |||
#import "advapi32.dll"
| |||
int CreateProcessAsUserW(HANDLE token,const string application_name,string command_line,PVOID process_attributes,PVOID thread_attributes,int inherit_handles,uint creation_flags,PVOID environment,const string current_directory,STARTUPINFOW &startup_info,PROCESS_INFORMATION &process_information);
| |||
int SetThreadToken(HANDLE thread,HANDLE token);
| |||
int OpenProcessToken(HANDLE process_handle,uint desired_access,HANDLE &token_handle);
| |||
int OpenThreadToken(HANDLE thread_handle,uint desired_access,int open_as_self,HANDLE &token_handle);
| |||
#import
| |||
//+------------------------------------------------------------------+
|