85 lines
5.6 KiB
MQL4
85 lines
5.6 KiB
MQL4
//+------------------------------------------------------------------+
| |||
//| memoryapi.mqh |
| |||
//| Copyright 2000-2025, MetaQuotes Ltd. |
| |||
//| https://www.mql5.com |
| |||
//+------------------------------------------------------------------+
| |||
#include <WinAPI\windef.mqh>
| |||
#include <WinAPI\winnt.mqh>
| |||
| |||
//---
| |||
enum MEMORY_RESOURCE_NOTIFICATION_TYPE
| |||
{
| |||
LowMemoryResourceNotification,
| |||
HighMemoryResourceNotification
| |||
};
| |||
//---
| |||
enum OFFER_PRIORITY
| |||
{
| |||
VmOfferPriorityVeryLow=1,
| |||
VmOfferPriorityLow,
| |||
VmOfferPriorityBelowNormal,
| |||
VmOfferPriorityNormal
| |||
};
| |||
//---
| |||
enum WIN32_MEMORY_INFORMATION_CLASS
| |||
{
| |||
MemoryRegionInfo
| |||
};
| |||
//---
| |||
struct WIN32_MEMORY_RANGE_ENTRY
| |||
{
| |||
PVOID VirtualAddress;
| |||
ulong NumberOfBytes;
| |||
};
| |||
//+------------------------------------------------------------------+
| |||
//| |
| |||
//+------------------------------------------------------------------+
| |||
#import "kernel32.dll"
| |||
int AllocateUserPhysicalPages(HANDLE hProcess,ulong &NumberOfPages,ulong &PageArray[]);
| |||
int AllocateUserPhysicalPagesNuma(HANDLE hProcess,ulong &NumberOfPages,ulong &PageArray[],uint nndPreferred);
| |||
HANDLE CreateFileMappingFromApp(HANDLE hFile,PVOID SecurityAttributes,uint PageProtection,ulong MaximumSize,const string Name);
| |||
HANDLE CreateFileMappingNumaW(HANDLE hFile,PVOID lpFileMappingAttributes,uint flProtect,uint dwMaximumSizeHigh,uint dwMaximumSizeLow,const string lpName,uint nndPreferred);
| |||
HANDLE CreateFileMappingW(HANDLE hFile,PVOID lpFileMappingAttributes,uint flProtect,uint dwMaximumSizeHigh,uint dwMaximumSizeLow,const string lpName);
| |||
HANDLE CreateMemoryResourceNotification(MEMORY_RESOURCE_NOTIFICATION_TYPE NotificationType);
| |||
uint DiscardVirtualMemory(PVOID VirtualAddress,ulong Size);
| |||
int FlushViewOfFile(const PVOID lpBaseAddress,ulong dwNumberOfBytesToFlush);
| |||
int FreeUserPhysicalPages(HANDLE hProcess,ulong &NumberOfPages,ulong &PageArray[]);
| |||
ulong GetLargePageMinimum(void);
| |||
int GetMemoryErrorHandlingCapabilities(uint &Capabilities);
| |||
int GetProcessWorkingSetSizeEx(HANDLE hProcess,ulong &lpMinimumWorkingSetSize,ulong &lpMaximumWorkingSetSize,uint &Flags);
| |||
int GetSystemFileCacheSize(ulong &lpMinimumFileCacheSize,ulong &lpMaximumFileCacheSize,uint &lpFlags);
| |||
uint GetWriteWatch(uint dwFlags,PVOID lpBaseAddress,ulong dwRegionSize,PVOID &lpAddresses[],uint &lpdwCount,uint &lpdwGranularity);
| |||
int MapUserPhysicalPages(PVOID VirtualAddress,ulong &NumberOfPages,ulong &PageArray[]);
| |||
PVOID MapViewOfFile(HANDLE hFileMappingObject,uint dwDesiredAccess,uint dwFileOffsetHigh,uint dwFileOffsetLow,ulong dwNumberOfBytesToMap);
| |||
PVOID MapViewOfFileEx(HANDLE hFileMappingObject,uint dwDesiredAccess,uint dwFileOffsetHigh,uint dwFileOffsetLow,ulong dwNumberOfBytesToMap,PVOID lpBaseAddress);
| |||
PVOID MapViewOfFileFromApp(HANDLE hFileMappingObject,uint DesiredAccess,ulong FileOffset,ulong NumberOfBytesToMap);
| |||
uint OfferVirtualMemory(PVOID VirtualAddress,ulong Size,OFFER_PRIORITY Priority);
| |||
HANDLE OpenFileMappingW(uint dwDesiredAccess,int bInheritHandle,const string lpName);
| |||
int PrefetchVirtualMemory(HANDLE hProcess,uint &NumberOfEntries,WIN32_MEMORY_RANGE_ENTRY &VirtualAddresses,uint Flags);
| |||
int QueryMemoryResourceNotification(HANDLE ResourceNotificationHandle,int &ResourceState);
| |||
int ReadProcessMemory(HANDLE hProcess,const PVOID lpBaseAddress,PVOID lpBuffer,ulong nSize,ulong &lpNumberOfBytesRead);
| |||
uint ReclaimVirtualMemory(const PVOID VirtualAddress,ulong Size);
| |||
PVOID RegisterBadMemoryNotification(PVOID Callback);
| |||
uint ResetWriteWatch(PVOID lpBaseAddress,ulong dwRegionSize);
| |||
int SetProcessWorkingSetSizeEx(HANDLE hProcess,ulong dwMinimumWorkingSetSize,ulong dwMaximumWorkingSetSize,uint Flags);
| |||
int SetSystemFileCacheSize(ulong MinimumFileCacheSize,ulong MaximumFileCacheSize,uint Flags);
| |||
int UnmapViewOfFile(const PVOID lpBaseAddress);
| |||
int UnmapViewOfFileEx(PVOID BaseAddress,uint UnmapFlags);
| |||
int UnregisterBadMemoryNotification(PVOID RegistrationHandle);
| |||
PVOID VirtualAlloc(PVOID lpAddress,ulong dwSize,uint flAllocationType,uint flProtect);
| |||
PVOID VirtualAllocEx(HANDLE hProcess,PVOID lpAddress,ulong dwSize,uint flAllocationType,uint flProtect);
| |||
PVOID VirtualAllocExNuma(HANDLE hProcess,PVOID lpAddress,ulong dwSize,uint flAllocationType,uint flProtect,uint nndPreferred);
| |||
int VirtualFree(PVOID lpAddress,ulong dwSize,uint dwFreeType);
| |||
int VirtualFreeEx(HANDLE hProcess,PVOID lpAddress,ulong dwSize,uint dwFreeType);
| |||
int VirtualLock(PVOID lpAddress,ulong dwSize);
| |||
int VirtualProtect(PVOID lpAddress,ulong dwSize,uint flNewProtect,uint &lpflOldProtect);
| |||
int VirtualProtectEx(HANDLE hProcess,PVOID lpAddress,ulong dwSize,uint flNewProtect,uint &lpflOldProtect);
| |||
ulong VirtualQuery(const PVOID lpAddress,MEMORY_BASIC_INFORMATION &lpBuffer,ulong dwLength);
| |||
ulong VirtualQueryEx(HANDLE hProcess,const PVOID lpAddress,MEMORY_BASIC_INFORMATION &lpBuffer,ulong dwLength);
| |||
int VirtualUnlock(PVOID lpAddress,ulong dwSize);
| |||
int WriteProcessMemory(HANDLE hProcess,PVOID lpBaseAddress,PVOID lpBuffer,ulong nSize,ulong &lpNumberOfBytesWritten);
| |||
int WriteProcessMemory(HANDLE hProcess,PVOID lpBaseAddress,uchar &lpBuffer[],ulong nSize,ulong &lpNumberOfBytesWritten);
| |||
int WriteProcessMemory(HANDLE hProcess,uchar &lpBaseAddress[],PVOID lpBuffer,ulong nSize,ulong &lpNumberOfBytesWritten);
| |||
int WriteProcessMemory(HANDLE hProcess,uchar &lpBaseAddress[],uchar &lpBuffer[],ulong nSize,ulong &lpNumberOfBytesWritten);
| |||
#import
| |||
//+------------------------------------------------------------------+
|