master
  1/**
  2 * This file is part of the mingw-w64 runtime package.
  3 * No warranty is given; refer to the file DISCLAIMER within this package.
  4 */
  5#ifndef _MEMORYAPI_H_
  6#define _MEMORYAPI_H_
  7
  8#include <apiset.h>
  9#include <apisetcconv.h>
 10#include <minwindef.h>
 11#include <minwinbase.h>
 12
 13#ifdef __cplusplus
 14extern "C" {
 15#endif
 16
 17#if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP)
 18  typedef enum _MEMORY_RESOURCE_NOTIFICATION_TYPE {
 19    LowMemoryResourceNotification,
 20    HighMemoryResourceNotification
 21  } MEMORY_RESOURCE_NOTIFICATION_TYPE;
 22
 23#if _WIN32_WINNT >= _WIN32_WINNT_WIN8
 24  typedef struct _WIN32_MEMORY_RANGE_ENTRY {
 25    PVOID VirtualAddress;
 26    SIZE_T NumberOfBytes;
 27  } WIN32_MEMORY_RANGE_ENTRY, *PWIN32_MEMORY_RANGE_ENTRY;
 28#endif
 29#endif
 30
 31#if (WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_APP) && _WIN32_WINNT >= _WIN32_WINNT_WIN10) || WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP)
 32    WINBASEAPI WINBOOL WINAPI VirtualFree (LPVOID lpAddress, SIZE_T dwSize, DWORD dwFreeType);
 33#endif
 34#if (WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_APP) && NTDDI_VERSION >= NTDDI_WIN10_19H1) || WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP)
 35    WINBASEAPI LPVOID WINAPI VirtualAlloc (LPVOID lpAddress, SIZE_T dwSize, DWORD flAllocationType, DWORD flProtect);
 36#endif
 37#if (WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_APP) && NTDDI_VERSION >= NTDDI_WIN10_VB) || WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP)
 38    WINBASEAPI LPVOID WINAPI VirtualAllocEx (HANDLE hProcess, LPVOID lpAddress, SIZE_T dwSize, DWORD flAllocationType, DWORD flProtect);
 39#endif
 40
 41#if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_APP)
 42
 43#define FILE_MAP_WRITE SECTION_MAP_WRITE
 44#define FILE_MAP_READ SECTION_MAP_READ
 45#define FILE_MAP_ALL_ACCESS SECTION_ALL_ACCESS
 46#define FILE_MAP_COPY 0x1
 47#define FILE_MAP_RESERVE 0x80000000
 48#define FILE_MAP_TARGETS_INVALID 0x40000000
 49#define FILE_MAP_LARGE_PAGES 0x20000000
 50
 51  WINBASEAPI SIZE_T WINAPI VirtualQuery (LPCVOID lpAddress, PMEMORY_BASIC_INFORMATION lpBuffer, SIZE_T dwLength);
 52  WINBASEAPI WINBOOL WINAPI FlushViewOfFile (LPCVOID lpBaseAddress, SIZE_T dwNumberOfBytesToFlush);
 53  WINBASEAPI WINBOOL WINAPI UnmapViewOfFile (LPCVOID lpBaseAddress);
 54  WINBASEAPI WINBOOL WINAPI UnmapViewOfFile2(HANDLE Process, PVOID BaseAddress, ULONG UnmapFlags);
 55  WINBASEAPI HANDLE WINAPI CreateFileMappingFromApp (HANDLE hFile, PSECURITY_ATTRIBUTES SecurityAttributes, ULONG PageProtection, ULONG64 MaximumSize, PCWSTR Name);
 56  WINBASEAPI PVOID WINAPI MapViewOfFileFromApp (HANDLE hFileMappingObject, ULONG DesiredAccess, ULONG64 FileOffset, SIZE_T NumberOfBytesToMap);
 57  WINBASEAPI WINBOOL WINAPI VirtualUnlockEx(HANDLE Process, LPVOID Address, SIZE_T Size);
 58
 59#if _WIN32_WINNT >= _WIN32_WINNT_WIN10
 60  WINBASEAPI WINBOOL WINAPI SetProcessValidCallTargets(HANDLE hProcess, PVOID VirtualAddress, SIZE_T RegionSize, ULONG NumberOfOffsets, PCFG_CALL_TARGET_INFO OffsetInformation);
 61  WINBASEAPI WINBOOL WINAPI SetProcessValidCallTargetsForMappedView(HANDLE Process, PVOID VirtualAddress, SIZE_T RegionSize, ULONG NumberOfOffsets, PCFG_CALL_TARGET_INFO OffsetInformation, HANDLE Section, ULONG64 ExpectedFileOffset);
 62  WINBASEAPI PVOID WINAPI VirtualAllocFromApp(PVOID BaseAddress, SIZE_T Size, ULONG AllocationType, ULONG  Protection);
 63  WINBASEAPI WINBOOL WINAPI VirtualProtectFromApp (PVOID lpAddress, SIZE_T dwSize, ULONG flNewProtect, PULONG lpflOldProtect);
 64  WINBASEAPI HANDLE WINAPI OpenFileMappingFromApp(ULONG DesiredAccess, WINBOOL InheritHandle, PCWSTR Name);
 65#endif
 66
 67#if NTDDI_VERSION >= NTDDI_WIN10_RS4
 68  WINBASEAPI PVOID WINAPI VirtualAlloc2FromApp(HANDLE Process, PVOID BaseAddress, SIZE_T Size, ULONG AllocationType, ULONG PageProtection, MEM_EXTENDED_PARAMETER* ExtendedParameters, ULONG ParameterCount);
 69  WINBASEAPI PVOID WINAPI MapViewOfFile3FromApp(HANDLE FileMapping, HANDLE Process, PVOID BaseAddress, ULONG64 Offset, SIZE_T ViewSize, ULONG AllocationType, ULONG PageProtection, MEM_EXTENDED_PARAMETER* ExtendedParameters, ULONG ParameterCount);
 70#endif
 71
 72#endif /* WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_APP) */
 73
 74#if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP) || defined(WINSTORECOMPAT)
 75  WINBASEAPI WINBOOL WINAPI VirtualProtect (LPVOID lpAddress, SIZE_T dwSize, DWORD flNewProtect, PDWORD lpflOldProtect);
 76#endif
 77
 78#if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP)
 79#define FILE_MAP_EXECUTE SECTION_MAP_EXECUTE_EXPLICIT
 80
 81#define FILE_CACHE_FLAGS_DEFINED
 82#define FILE_CACHE_MAX_HARD_ENABLE 0x00000001
 83#define FILE_CACHE_MAX_HARD_DISABLE 0x00000002
 84#define FILE_CACHE_MIN_HARD_ENABLE 0x00000004
 85#define FILE_CACHE_MIN_HARD_DISABLE 0x00000008
 86
 87  WINBASEAPI WINBOOL WINAPI VirtualProtectEx (HANDLE hProcess, LPVOID lpAddress, SIZE_T dwSize, DWORD flNewProtect, PDWORD lpflOldProtect);
 88  WINBASEAPI SIZE_T WINAPI VirtualQueryEx (HANDLE hProcess, LPCVOID lpAddress, PMEMORY_BASIC_INFORMATION lpBuffer, SIZE_T dwLength);
 89  WINBASEAPI WINBOOL WINAPI ReadProcessMemory (HANDLE hProcess, LPCVOID lpBaseAddress, LPVOID lpBuffer, SIZE_T nSize, SIZE_T *lpNumberOfBytesRead);
 90  WINBASEAPI WINBOOL WINAPI WriteProcessMemory (HANDLE hProcess, LPVOID lpBaseAddress, LPCVOID lpBuffer, SIZE_T nSize, SIZE_T *lpNumberOfBytesWritten);
 91  WINBASEAPI HANDLE WINAPI CreateFileMappingW (HANDLE hFile, LPSECURITY_ATTRIBUTES lpFileMappingAttributes, DWORD flProtect, DWORD dwMaximumSizeHigh, DWORD dwMaximumSizeLow, LPCWSTR lpName);
 92  WINBASEAPI HANDLE WINAPI OpenFileMappingW (DWORD dwDesiredAccess, WINBOOL bInheritHandle, LPCWSTR lpName);
 93  WINBASEAPI LPVOID WINAPI MapViewOfFile (HANDLE hFileMappingObject, DWORD dwDesiredAccess, DWORD dwFileOffsetHigh, DWORD dwFileOffsetLow, SIZE_T dwNumberOfBytesToMap);
 94  WINBASEAPI LPVOID WINAPI MapViewOfFileEx (HANDLE hFileMappingObject, DWORD dwDesiredAccess, DWORD dwFileOffsetHigh, DWORD dwFileOffsetLow, SIZE_T dwNumberOfBytesToMap, LPVOID lpBaseAddress);
 95  WINBASEAPI WINBOOL WINAPI VirtualLock (LPVOID lpAddress, SIZE_T dwSize);
 96  WINBASEAPI WINBOOL WINAPI VirtualUnlock (LPVOID lpAddress, SIZE_T dwSize);
 97  WINBASEAPI HANDLE WINAPI CreateMemoryResourceNotification (MEMORY_RESOURCE_NOTIFICATION_TYPE NotificationType);
 98  WINBASEAPI WINBOOL WINAPI QueryMemoryResourceNotification (HANDLE ResourceNotificationHandle, PBOOL ResourceState);
 99  WINBASEAPI WINBOOL WINAPI GetSystemFileCacheSize (PSIZE_T lpMinimumFileCacheSize, PSIZE_T lpMaximumFileCacheSize, PDWORD lpFlags);
100  WINBASEAPI WINBOOL WINAPI SetSystemFileCacheSize (SIZE_T MinimumFileCacheSize, SIZE_T MaximumFileCacheSize, DWORD Flags);
101
102#ifdef UNICODE
103#define CreateFileMapping CreateFileMappingW
104#define OpenFileMapping OpenFileMappingW
105#endif
106
107#if _WIN32_WINNT >= _WIN32_WINNT_WINXP
108  WINBASEAPI WINBOOL WINAPI AllocateUserPhysicalPages(HANDLE hProcess, PULONG_PTR NumberOfPages, PULONG_PTR PageArray);
109  WINBASEAPI WINBOOL WINAPI FreeUserPhysicalPages(HANDLE hProcess, PULONG_PTR NumberOfPages, PULONG_PTR PageArray);
110  WINBASEAPI WINBOOL WINAPI MapUserPhysicalPages(PVOID VirtualAddress, ULONG_PTR NumberOfPages, PULONG_PTR PageArray);
111#endif
112
113#if _WIN32_WINNT >= _WIN32_WINNT_VISTA
114  WINBASEAPI WINBOOL WINAPI AllocateUserPhysicalPagesNuma(HANDLE hProcess, PULONG_PTR NumberOfPages, PULONG_PTR PageArray, DWORD nndPreferred);
115  WINBASEAPI HANDLE WINAPI CreateFileMappingNumaW (HANDLE hFile, LPSECURITY_ATTRIBUTES lpFileMappingAttributes, DWORD flProtect, DWORD dwMaximumSizeHigh, DWORD dwMaximumSizeLow, LPCWSTR lpName, DWORD nndPreferred);
116  WINBASEAPI LPVOID WINAPI VirtualAllocExNuma(HANDLE hProcess, LPVOID lpAddress, SIZE_T dwSize, DWORD flAllocationType, DWORD flProtect, DWORD nndPreferred);
117#ifdef UNICODE
118#define CreateFileMappingNuma CreateFileMappingNumaW
119#endif
120#endif
121
122#if _WIN32_WINNT >= _WIN32_WINNT_WIN8
123#define MEHC_PATROL_SCRUBBER_PRESENT 0x1
124  WINBASEAPI WINBOOL WINAPI GetMemoryErrorHandlingCapabilities(PULONG Capabilities);
125  WINBASEAPI WINBOOL WINAPI PrefetchVirtualMemory (HANDLE hProcess, ULONG_PTR NumberOfEntries, PWIN32_MEMORY_RANGE_ENTRY VirtualAddresses, ULONG Flags);
126  typedef VOID WINAPI BAD_MEMORY_CALLBACK_ROUTINE(VOID);
127  typedef BAD_MEMORY_CALLBACK_ROUTINE *PBAD_MEMORY_CALLBACK_ROUTINE;
128  WINBASEAPI PVOID WINAPI RegisterBadMemoryNotification(PBAD_MEMORY_CALLBACK_ROUTINE Callback);
129  WINBASEAPI WINBOOL WINAPI UnregisterBadMemoryNotification(PVOID RegistrationHandle);
130#endif
131
132#if NTDDI_VERSION >= NTDDI_WIN10_RS1
133  typedef enum WIN32_MEMORY_INFORMATION_CLASS {
134    MemoryRegionInfo
135  } WIN32_MEMORY_INFORMATION_CLASS;
136
137  typedef struct WIN32_MEMORY_REGION_INFORMATION {
138    PVOID AllocationBase;
139    ULONG AllocationProtect;
140    __C89_NAMELESS union {
141        ULONG Flags;
142        __C89_NAMELESS struct {
143            ULONG Private : 1;
144            ULONG MappedDataFile : 1;
145            ULONG MappedImage : 1;
146            ULONG MappedPageFile : 1;
147            ULONG MappedPhysical : 1;
148            ULONG DirectMapped : 1;
149            ULONG Reserved : 26;
150        };
151    };
152    SIZE_T RegionSize;
153    SIZE_T CommitSize;
154  } WIN32_MEMORY_REGION_INFORMATION;
155
156  WINBASEAPI WINBOOL WINAPI QueryVirtualMemoryInformation(HANDLE Process, const VOID* VirtualAddress, WIN32_MEMORY_INFORMATION_CLASS MemoryInformationClass, PVOID MemoryInformation, SIZE_T MemoryInformationSize, PSIZE_T ReturnSize);
157
158#endif /* NTDDI_VERSION >= NTDDI_WIN10_RS1 */
159
160#if NTDDI_VERSION >= NTDDI_WIN10_RS2
161  WINBASEAPI PVOID WINAPI MapViewOfFileNuma2(HANDLE FileMappingHandle, HANDLE ProcessHandle, ULONG64 Offset, PVOID BaseAddress, SIZE_T ViewSize, ULONG AllocationType, ULONG PageProtection, ULONG PreferredNode);
162  FORCEINLINE PVOID MapViewOfFile2(HANDLE FileMappingHandle, HANDLE ProcessHandle, ULONG64 Offset, PVOID BaseAddress, SIZE_T ViewSize, ULONG AllocationType, ULONG PageProtection) {
163    return MapViewOfFileNuma2(FileMappingHandle, ProcessHandle, Offset, BaseAddress, ViewSize, AllocationType, PageProtection, NUMA_NO_PREFERRED_NODE);
164  }
165#endif
166
167#if NTDDI_VERSION >= NTDDI_WIN10_RS4
168  WINBASEAPI PVOID WINAPI VirtualAlloc2(HANDLE Process, PVOID BaseAddress, SIZE_T Size, ULONG AllocationType, ULONG PageProtection, MEM_EXTENDED_PARAMETER* ExtendedParameters, ULONG ParameterCount);
169  WINBASEAPI PVOID WINAPI MapViewOfFile3(HANDLE FileMapping, HANDLE Process, PVOID BaseAddress, ULONG64 Offset, SIZE_T ViewSize, ULONG AllocationType, ULONG PageProtection, MEM_EXTENDED_PARAMETER* ExtendedParameters, ULONG ParameterCount);
170#endif
171
172#if NTDDI_VERSION >= NTDDI_WIN10_RS5
173  WINBASEAPI HANDLE WINAPI CreateFileMapping2(HANDLE File, SECURITY_ATTRIBUTES* SecurityAttributes, ULONG DesiredAccess, ULONG PageProtection, ULONG AllocationAttributes, ULONG64 MaximumSize, PCWSTR Name, MEM_EXTENDED_PARAMETER* ExtendedParameters, ULONG ParameterCount);
174#endif
175
176#endif /* WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP) */
177  
178#if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_APP)
179  WINBASEAPI SIZE_T WINAPI GetLargePageMinimum (VOID);
180  WINBASEAPI WINBOOL WINAPI GetProcessWorkingSetSizeEx (HANDLE hProcess, PSIZE_T lpMinimumWorkingSetSize, PSIZE_T lpMaximumWorkingSetSize, PDWORD Flags);
181  WINBASEAPI WINBOOL WINAPI SetProcessWorkingSetSizeEx (HANDLE hProcess, SIZE_T dwMinimumWorkingSetSize, SIZE_T dwMaximumWorkingSetSize, DWORD Flags);
182  WINBASEAPI UINT WINAPI GetWriteWatch (DWORD dwFlags, PVOID lpBaseAddress, SIZE_T dwRegionSize, PVOID *lpAddresses, ULONG_PTR *lpdwCount, LPDWORD lpdwGranularity);
183  WINBASEAPI UINT WINAPI ResetWriteWatch (LPVOID lpBaseAddress, SIZE_T dwRegionSize);
184  WINBASEAPI WINBOOL WINAPI VirtualFreeEx (HANDLE hProcess, LPVOID lpAddress, SIZE_T dwSize, DWORD dwFreeType);
185
186#if _WIN32_WINNT >= _WIN32_WINNT_WINBLUE
187  typedef enum _OFFER_PRIORITY {
188    VmOfferPriorityVeryLow = 1,
189    VmOfferPriorityLow,
190    VmOfferPriorityBelowNormal,
191    VmOfferPriorityNormal
192  } OFFER_PRIORITY;
193
194  WINBASEAPI DWORD WINAPI DiscardVirtualMemory (PVOID VirtualAddress, SIZE_T Size);
195  WINBASEAPI DWORD WINAPI OfferVirtualMemory (PVOID VirtualAddress, SIZE_T Size, OFFER_PRIORITY Priority);
196  WINBASEAPI DWORD WINAPI ReclaimVirtualMemory (PVOID VirtualAddress, SIZE_T Size);
197#endif
198
199#if _WIN32_WINNT >= _WIN32_WINNT_WIN8
200  WINBASEAPI WINBOOL WINAPI UnmapViewOfFileEx (PVOID BaseAddress, ULONG UnmapFlags);
201#endif
202#endif /* WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_APP) */
203
204
205#ifdef __cplusplus
206}
207#endif
208#endif