memoryapi.h 11 KB

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