| //+------------------------------------------------------------------+
|
| //| 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
|
| //+------------------------------------------------------------------+
|