ReactOS 0.4.16-dev-1399-gaaed9f7
mm.h
Go to the documentation of this file.
1#pragma once
2
3#include <internal/arch/mm.h>
4
5#ifdef __cplusplus
6extern "C" {
7#endif
8
9/* TYPES *********************************************************************/
10
11struct _EPROCESS;
12
22extern ULONG MmThrottleTop;
24
26
28
30
33
39
48
49extern PVOID MiDebugMapping; // internal
50extern PMMPTE MmDebugPte; // internal
51
53
54struct _KTRAP_FRAME;
55struct _EPROCESS;
56struct _MM_RMAP_ENTRY;
58
59//
60// Pool Quota values
61//
62#define MI_QUOTA_NON_PAGED_NEEDED_PAGES 64
63#define MI_NON_PAGED_QUOTA_MIN_RESIDENT_PAGES 200
64#define MI_CHARGE_PAGED_POOL_QUOTA 0x80000
65#define MI_CHARGE_NON_PAGED_POOL_QUOTA 0x10000
66
67//
68// Special IRQL value (found in assertions)
69//
70#define MM_NOIRQL ((KIRQL)0xFFFFFFFF)
71
72//
73// MmDbgCopyMemory Flags
74//
75#define MMDBG_COPY_WRITE 0x00000001
76#define MMDBG_COPY_PHYSICAL 0x00000002
77#define MMDBG_COPY_UNSAFE 0x00000004
78#define MMDBG_COPY_CACHED 0x00000008
79#define MMDBG_COPY_UNCACHED 0x00000010
80#define MMDBG_COPY_WRITE_COMBINED 0x00000020
81
82//
83// Maximum chunk size per copy
84//
85#define MMDBG_COPY_MAX_SIZE 0x8
86
87#if defined(_X86_) // intenal for marea.c
88#define MI_STATIC_MEMORY_AREAS (14)
89#else
90#define MI_STATIC_MEMORY_AREAS (13)
91#endif
92
93#define MEMORY_AREA_SECTION_VIEW (1)
94#ifdef NEWCC
95#define MEMORY_AREA_CACHE (2)
96#endif
97#define MEMORY_AREA_OWNED_BY_ARM3 (15)
98#define MEMORY_AREA_STATIC (0x80000000)
99
100/* Although Microsoft says this isn't hardcoded anymore,
101 they won't be able to change it. Stuff depends on it */
102#define MM_VIRTMEM_GRANULARITY (64 * 1024)
103
104#define STATUS_MM_RESTART_OPERATION ((NTSTATUS)0xD0000001)
105
106/*
107 * Additional flags for protection attributes
108 */
109#define PAGE_WRITETHROUGH (1024)
110#define PAGE_SYSTEM (2048)
111
112#define MC_USER (0)
113#define MC_SYSTEM (1)
114#define MC_MAXIMUM (2)
115
116#define PAGED_POOL_MASK 1
117#define MUST_SUCCEED_POOL_MASK 2
118#define CACHE_ALIGNED_POOL_MASK 4
119#define QUOTA_POOL_MASK 8
120#define SESSION_POOL_MASK 32
121#define VERIFIER_POOL_MASK 64
122
123#define MAX_PAGING_FILES (16)
124
125// FIXME: use ALIGN_UP_BY
126#define MM_ROUND_UP(x,s) \
127 ((PVOID)(((ULONG_PTR)(x)+(s)-1) & ~((ULONG_PTR)(s)-1)))
128
129#define MM_ROUND_DOWN(x,s) \
130 ((PVOID)(((ULONG_PTR)(x)) & ~((ULONG_PTR)(s)-1)))
131
132/* PAGE_ROUND_UP and PAGE_ROUND_DOWN equivalent, with support for 64-bit-only data types */
133#define PAGE_ROUND_UP_64(x) \
134 (((x) + PAGE_SIZE - 1) & ~(PAGE_SIZE - 1))
135
136#define PAGE_ROUND_DOWN_64(x) \
137 ((x) & ~(PAGE_SIZE - 1))
138
139#define PAGE_FLAGS_VALID_FOR_SECTION \
140 (PAGE_READONLY | \
141 PAGE_READWRITE | \
142 PAGE_WRITECOPY | \
143 PAGE_EXECUTE | \
144 PAGE_EXECUTE_READ | \
145 PAGE_EXECUTE_READWRITE | \
146 PAGE_EXECUTE_WRITECOPY | \
147 PAGE_NOACCESS | \
148 PAGE_NOCACHE)
149
150#define PAGE_IS_READABLE \
151 (PAGE_READONLY | \
152 PAGE_READWRITE | \
153 PAGE_WRITECOPY | \
154 PAGE_EXECUTE_READ | \
155 PAGE_EXECUTE_READWRITE | \
156 PAGE_EXECUTE_WRITECOPY)
157
158#define PAGE_IS_WRITABLE \
159 (PAGE_READWRITE | \
160 PAGE_WRITECOPY | \
161 PAGE_EXECUTE_READWRITE | \
162 PAGE_EXECUTE_WRITECOPY)
163
164#define PAGE_IS_EXECUTABLE \
165 (PAGE_EXECUTE | \
166 PAGE_EXECUTE_READ | \
167 PAGE_EXECUTE_READWRITE | \
168 PAGE_EXECUTE_WRITECOPY)
169
170#define PAGE_IS_WRITECOPY \
171 (PAGE_WRITECOPY | \
172 PAGE_EXECUTE_WRITECOPY)
173
174//
175// Wait entry for marking pages that are being serviced
176//
177#ifdef _M_IX86
178#define MM_WAIT_ENTRY 0x7ffffc00
179#elif defined(_M_AMD64)
180#define MM_WAIT_ENTRY 0x7FFFFFFFFFFFFC00ULL
181#else
182#error Unsupported architecture!
183#endif
184
185#ifdef _M_AMD64
186#define InterlockedCompareExchangePte(PointerPte, Exchange, Comperand) \
187 InterlockedCompareExchange64((PLONG64)(PointerPte), Exchange, Comperand)
188
189#define InterlockedExchangePte(PointerPte, Value) \
190 InterlockedExchange64((PLONG64)(PointerPte), Value)
191#else
192#define InterlockedCompareExchangePte(PointerPte, Exchange, Comperand) \
193 InterlockedCompareExchange((PLONG)(PointerPte), Exchange, Comperand)
194
195#define InterlockedExchangePte(PointerPte, Value) \
196 InterlockedExchange((PLONG)(PointerPte), Value)
197#endif
198
200{
203
204 FAST_MUTEX Lock; /* lock which protects the page directory */
205 LARGE_INTEGER RawLength; /* length of the segment which is part of the mapped file */
206 LARGE_INTEGER Length; /* absolute length of the segment */
213
214 struct
215 {
216 ULONGLONG FileOffset; /* start offset into the file for image sections */
217 ULONG_PTR VirtualAddress; /* start offset into the address range for image sections */
220
222
224
227
229{
235
241
242#define MM_PHYSICALMEMORY_SEGMENT (0x1)
243#define MM_DATAFILE_SEGMENT (0x2)
244#define MM_SEGMENT_INDELETE (0x4)
245#define MM_SEGMENT_INCREATE (0x8)
246#define MM_IMAGE_SECTION_FLUSH_DELETE (0x10)
247
248
249#define MA_GetStartingAddress(_MemoryArea) ((_MemoryArea)->VadNode.StartingVpn << PAGE_SHIFT)
250#define MA_GetEndingAddress(_MemoryArea) (((_MemoryArea)->VadNode.EndingVpn + 1) << PAGE_SHIFT)
251
252typedef struct _MEMORY_AREA
253{
255
260
261 struct
262 {
268
269#define MI_SET_MEMORY_AREA_VAD(Vad) do { (Vad)->u.VadFlags.Spare |= 1; } while (0)
270#define MI_IS_MEMORY_AREA_VAD(Vad) (((Vad)->u.VadFlags.Spare & 1) != 0)
271#define MI_SET_ROSMM_VAD(Vad) do { (Vad)->u.VadFlags.Spare |= 2; } while (0)
272#define MI_IS_ROSMM_VAD(Vad) (((Vad)->u.VadFlags.Spare & 2) != 0)
273
274typedef struct _MM_RMAP_ENTRY
275{
279#if DBG
280 PVOID Caller;
281#endif
282}
284
285#if MI_TRACE_PFNS
288#define MI_SET_USAGE(x) MI_PFN_CURRENT_USAGE = x
289#define MI_SET_PROCESS2(x) memcpy(MI_PFN_CURRENT_PROCESS_NAME, x, min(sizeof(x), sizeof(MI_PFN_CURRENT_PROCESS_NAME)))
291void
293{
294 if (!Process)
295 MI_SET_PROCESS2("Kernel");
296 else if (Process == (PEPROCESS)1)
297 MI_SET_PROCESS2("Hydra");
298 else
299 MI_SET_PROCESS2(Process->ImageFileName);
300}
301
303void
304MI_SET_PROCESS_USTR(PUNICODE_STRING ustr)
305{
306 PWSTR pos, strEnd;
307 ULONG i;
308
309 if (!ustr->Buffer || ustr->Length == 0)
310 {
312 return;
313 }
314
315 pos = strEnd = &ustr->Buffer[ustr->Length / sizeof(WCHAR)];
316 while ((*pos != L'\\') && (pos > ustr->Buffer))
317 pos--;
318
319 if (*pos == L'\\')
320 pos++;
321
322 for (i = 0; i < sizeof(MI_PFN_CURRENT_PROCESS_NAME) && pos <= strEnd; i++, pos++)
324}
325#else
326#define MI_SET_USAGE(x)
327#define MI_SET_PROCESS(x)
328#define MI_SET_PROCESS2(x)
329#endif
330
331typedef enum _MI_PFN_USAGES
332{
360
361//
362// These two mappings are actually used by Windows itself, based on the ASSERTS
363//
364#define StartOfAllocation ReadInProgress
365#define EndOfAllocation WriteInProgress
366
367typedef struct _MMPFNENTRY
368{
370 USHORT ReadInProgress:1; // StartOfAllocation
371 USHORT WriteInProgress:1; // EndOfAllocation
380
381#ifdef _WIN64
382#define MI_PTE_FRAME_BITS 57
383#else
384#define MI_PTE_FRAME_BITS 25
385#endif
386
387// Mm internal
388typedef struct _MMPFN
389{
390 union
391 {
397
398 // HACK for ROSPFN
400 } u1;
402 union
403 {
406 } u2;
407 union
408 {
409 struct
410 {
413 };
414 struct
415 {
418 } e2;
419 } u3;
420#ifdef _WIN64
421 ULONG UsedPageTableEntries;
422#endif
423 union
424 {
427
428 // HACK for ROSPFN
430 };
431 union
432 {
434 struct
435 {
442 };
443 } u4;
444#if MI_TRACE_PFNS
445 MI_PFN_USAGES PfnUsage;
446 CHAR ProcessName[16];
447#define MI_SET_PFN_PROCESS_NAME(pfn, x) memcpy(pfn->ProcessName, x, min(sizeof(x), sizeof(pfn->ProcessName)))
448 PVOID CallSite;
449#endif
450
451 // HACK until WS lists are supported
456
457extern PMMPFN MmPfnDatabase;
458
459typedef struct _MMPFNLIST
460{
466
472
474{
479
480typedef struct _MM_REGION
481{
487
488// Mm internal
489/* Entry describing free pool memory */
490typedef struct _MMFREE_POOL_ENTRY
491{
497
498/* Signature of a freed block */
499#define MM_FREE_POOL_SIGNATURE 'ARM3'
500
501/* Paged pool information */
503{
513
515
516/* Page file information */
517typedef struct _MMPAGING_FILE
518{
528}
530
532
533typedef VOID
538 ULONG OldType,
539 ULONG OldProtect,
540 ULONG NewType,
542);
543
544typedef VOID
550 SWAPENTRY SwapEntry,
551 BOOLEAN Dirty
552);
553
554//
555// Mm copy support for Kd
556//
558NTAPI
562 IN ULONG Size,
564);
565
566//
567// Determines if a given address is a session address
568//
570NTAPI
573);
574
575ULONG
576NTAPI
579);
580
581ULONG
582NTAPI
585);
586
587/* marea.c *******************************************************************/
588
590NTAPI
593 ULONG Type,
596 ULONG Protection,
598 ULONG AllocationFlags,
599 ULONG AllocationGranularity
600);
601
603NTAPI
607);
608
610NTAPI
615 PVOID FreePageContext
616);
617
618VOID
619NTAPI
622 PMMVAD Vad);
623
625NTAPI
630);
631
633NTAPI
638
639PVOID
640NTAPI
644 ULONG_PTR Granularity,
645 BOOLEAN TopDown
646);
647
648/* npool.c *******************************************************************/
649
650CODE_SEG("INIT")
651VOID
652NTAPI
654
655PVOID
656NTAPI
659 IN SIZE_T SizeInBytes
660);
661
663NTAPI
666);
667
668ULONG
669NTAPI
671 IN PVOID StartingAddress
672);
673
674/* pool.c *******************************************************************/
675
678NTAPI
679MmRaisePoolQuota(
683);
684
686VOID
687NTAPI
688MmReturnPoolQuota(
691);
692
693/* mdl.c *********************************************************************/
694
695VOID
696NTAPI
698 PMDL Mdl,
699 PPFN_NUMBER Pages
700);
701
702/* mminit.c ******************************************************************/
703
704CODE_SEG("INIT")
706NTAPI
707MmInitSystem(IN ULONG Phase,
708 IN PLOADER_PARAMETER_BLOCK LoaderBlock);
709
710
711/* pagefile.c ****************************************************************/
712
714NTAPI
716
717VOID
718NTAPI
720
721CODE_SEG("INIT")
722VOID
723NTAPI
725
727NTAPI
729
731NTAPI
733 SWAPENTRY SwapEntry,
735);
736
738NTAPI
740 SWAPENTRY SwapEntry,
742);
743
744VOID
745NTAPI
747
749NTAPI
752 _In_ ULONG PageFileIndex,
753 _In_ ULONG_PTR PageFileOffset);
754
755/* process.c ****************************************************************/
756
758NTAPI
762 IN PVOID Section OPTIONAL,
765);
766
768NTAPI
771 IN PINITIAL_PEB InitialPeb,
772 OUT PPEB *BasePeb
773);
774
776NTAPI
780 IN PINITIAL_TEB InitialTeb,
781 OUT PTEB* BaseTeb
782);
783
784VOID
785NTAPI
788 PTEB Teb
789);
790
791VOID
792NTAPI
794
795VOID
796NTAPI
798
799ULONG
800NTAPI
802
804NTAPI
807 IN UCHAR MemoryPriority
808);
809
810/* special.c *****************************************************************/
811
812VOID
813NTAPI
815
817NTAPI
820 IN ULONG Tag);
821
823NTAPI
825 IN PVOID P);
826
828NTAPI
830 IN PVOID P);
831
832PVOID
833NTAPI
836 IN ULONG Tag,
838 IN ULONG SpecialType);
839
840VOID
841NTAPI
843 IN PVOID P);
844
845/* mm.c **********************************************************************/
846
848NTAPI
850 IN ULONG FaultCode,
853 IN PVOID TrapInformation
854);
855
856/* process.c *****************************************************************/
857
858PVOID
859NTAPI
861
862VOID
863NTAPI
865 BOOLEAN GuiStack);
866
867/* balance.c / pagefile.c******************************************************/
868
870{
871 /*
872 * Add up all the used "Committed" memory + pagefile.
873 * Not sure this is right. 8^\
874 * MmTotalCommittedPages should be adjusted consistently with
875 * other counters at different places.
876 *
877 MmTotalCommittedPages = MiMemoryConsumers[MC_SYSTEM].PagesUsed +
878 MiMemoryConsumers[MC_USER].PagesUsed +
879 MiUsedSwapPages;
880 */
881
882 /* Update Commitment */
884
885 /* Update Peak = max(Peak, Total) in a lockless way */
886 SIZE_T PeakCommitment = MmPeakCommitment;
887 while (TotalCommittedPages > PeakCommitment &&
888 InterlockedCompareExchangeSizeT(&MmPeakCommitment, TotalCommittedPages, PeakCommitment) != PeakCommitment)
889 {
890 PeakCommitment = MmPeakCommitment;
891 }
892}
893
894/* balance.c *****************************************************************/
895
896CODE_SEG("INIT")
897VOID
898NTAPI
900 ULONG Consumer,
901 NTSTATUS (*Trim)(ULONG Target, ULONG Priority, PULONG NrFreed)
902);
903
904CODE_SEG("INIT")
905VOID
906NTAPI
908 ULONG NrAvailablePages,
909 ULONG NrSystemPages
910);
911
913NTAPI
915 ULONG Consumer,
917);
918
920NTAPI
922 ULONG Consumer,
923 BOOLEAN MyWait,
924 PPFN_NUMBER AllocatedPage
925);
926
927CODE_SEG("INIT")
928VOID
929NTAPI
931
932VOID
933NTAPI
935
936/* rmap.c **************************************************************/
937#define RMAP_SEGMENT_MASK ~((ULONG_PTR)0xff)
938#define RMAP_IS_SEGMENT(x) (((ULONG_PTR)(x) & RMAP_SEGMENT_MASK) == RMAP_SEGMENT_MASK)
939
940VOID
941NTAPI
944 struct _MM_RMAP_ENTRY* ListHead
945);
946
947struct _MM_RMAP_ENTRY*
948NTAPI
950
951VOID
952NTAPI
955 struct _EPROCESS *Process,
957);
958
959VOID
960NTAPI
964 VOID (*DeleteMapping)(PVOID Context, struct _EPROCESS *Process, PVOID Address)
965);
966
967VOID
968NTAPI
971 struct _EPROCESS *Process,
973);
974
975CODE_SEG("INIT")
976VOID
977NTAPI
979
981NTAPI
983
985NTAPI
988
989/* freelist.c **********************************************************/
996KIRQL
997MiAcquirePfnLock(VOID)
998{
1000}
1001
1006VOID
1007MiReleasePfnLock(
1009{
1011}
1012
1017VOID
1018MiAcquirePfnLockAtDpcLevel(VOID)
1019{
1020 PKSPIN_LOCK_QUEUE LockQueue;
1021
1023 LockQueue = &KeGetCurrentPrcb()->LockQueue[LockQueuePfnLock];
1024 KeAcquireQueuedSpinLockAtDpcLevel(LockQueue);
1025}
1026
1031VOID
1032MiReleasePfnLockFromDpcLevel(VOID)
1033{
1034 PKSPIN_LOCK_QUEUE LockQueue;
1035
1036 LockQueue = &KeGetCurrentPrcb()->LockQueue[LockQueuePfnLock];
1037 KeReleaseQueuedSpinLockFromDpcLevel(LockQueue);
1039}
1040
1041#define MI_ASSERT_PFN_LOCK_HELD() NT_ASSERT((KeGetCurrentIrql() >= DISPATCH_LEVEL) && (MmPfnLock != 0))
1042
1044PMMPFN
1046{
1047 PMMPFN Page;
1048 extern RTL_BITMAP MiPfnBitMap;
1049
1050 /* Make sure the PFN number is valid */
1051 if (Pfn > MmHighestPhysicalPage) return NULL;
1052
1053 /* Make sure this page actually has a PFN entry */
1054 if ((MiPfnBitMap.Buffer) && !(RtlTestBit(&MiPfnBitMap, (ULONG)Pfn))) return NULL;
1055
1056 /* Get the entry */
1057 Page = &MmPfnDatabase[Pfn];
1058
1059 /* Return it */
1060 return Page;
1061};
1062
1066{
1067 //
1068 // This will return the Page Frame Number (PFN) from the MMPFN
1069 //
1070 return Pfn1 - MmPfnDatabase;
1071}
1072
1074NTAPI
1075MmGetLRUNextUserPage(PFN_NUMBER PreviousPage, BOOLEAN MoveToLast);
1076
1078NTAPI
1080
1081VOID
1082NTAPI
1084 IN BOOLEAN StatusOnly
1085);
1086
1087VOID
1088NTAPI
1090 VOID
1091);
1092
1093/* hypermap.c *****************************************************************/
1094PVOID
1095NTAPI
1098 IN PKIRQL OldIrql);
1099
1100VOID
1101NTAPI
1104 IN KIRQL OldIrql);
1105
1106PVOID
1107NTAPI
1109 IN PFN_NUMBER NumberOfPages);
1110
1111VOID
1112NTAPI
1114 IN PFN_NUMBER NumberOfPages);
1115
1116/* i386/page.c *********************************************************/
1117
1119NTAPI
1121 struct _EPROCESS* Process,
1122 PVOID Address,
1123 ULONG flProtect,
1125);
1126
1128NTAPI
1130 struct _EPROCESS* Process,
1131 PVOID Address,
1132 ULONG flProtect,
1134);
1135
1137NTAPI
1141 _In_ ULONG flProtect,
1143
1144ULONG
1145NTAPI
1147 struct _EPROCESS* Process,
1148 PVOID Address);
1149
1150VOID
1151NTAPI
1153 struct _EPROCESS* Process,
1154 PVOID Address,
1155 ULONG flProtect
1156);
1157
1158BOOLEAN
1159NTAPI
1161 struct _EPROCESS* Process,
1163);
1164
1165BOOLEAN
1166NTAPI
1168 struct _EPROCESS* Process,
1170);
1171
1172CODE_SEG("INIT")
1173VOID
1174NTAPI
1176
1177VOID
1178NTAPI
1181 PVOID Address,
1182 SWAPENTRY* SwapEntry
1183);
1184
1186NTAPI
1189 PVOID Address,
1190 SWAPENTRY SwapEntry
1191);
1192
1193VOID
1194NTAPI
1197 PVOID Address,
1198 SWAPENTRY *SwapEntry);
1199
1200BOOLEAN
1201NTAPI
1205);
1206
1208NTAPI
1210 ULONG Consumer
1211);
1212
1213VOID
1214NTAPI
1216
1217VOID
1218NTAPI
1220
1221ULONG
1222NTAPI
1224
1225BOOLEAN
1226NTAPI
1228
1229VOID
1230NTAPI
1233 SWAPENTRY SavedSwapEntry);
1234
1236NTAPI
1238
1239VOID
1240NTAPI
1244);
1245
1246VOID
1247NTAPI
1249#define MmSetCleanPage(__P, __A) MmSetDirtyBit(__P, __A, FALSE)
1250#define MmSetDirtyPage(__P, __A) MmSetDirtyBit(__P, __A, TRUE)
1251
1252VOID
1253NTAPI
1255 struct _EPROCESS *Process,
1257);
1258
1260NTAPI
1262 struct _EPROCESS *Process,
1264);
1265
1266BOOLEAN
1267NTAPI
1269 IN ULONG MinWs,
1270 IN PEPROCESS Dest,
1271 IN PULONG_PTR DirectoryTableBase
1272);
1273
1274CODE_SEG("INIT")
1276NTAPI
1279 IN PULONG_PTR DirectoryTableBase
1280);
1281
1282CODE_SEG("INIT")
1284NTAPI
1287);
1288
1290NTAPI
1291MmSetExecuteOptions(IN ULONG ExecuteOptions);
1292
1294NTAPI
1295MmGetExecuteOptions(IN PULONG ExecuteOptions);
1296
1298BOOLEAN
1304);
1305
1307BOOLEAN
1308MmDeletePhysicalMapping(
1313);
1314
1315/* arch/procsup.c ************************************************************/
1316
1317BOOLEAN
1320 _In_ PULONG_PTR DirectoryTableBase);
1321
1322/* wset.c ********************************************************************/
1323
1326 ULONG Target,
1328 PULONG NrFreedPages
1329);
1330
1331/* region.c ************************************************************/
1332
1334NTAPI
1338 PLIST_ENTRY RegionListHead,
1339 PVOID StartAddress,
1340 SIZE_T Length,
1341 ULONG NewType,
1343 PMM_ALTER_REGION_FUNC AlterFunc
1344);
1345
1346VOID
1347NTAPI
1349 PLIST_ENTRY RegionListHead,
1350 SIZE_T Length,
1351 ULONG Type,
1353);
1354
1356NTAPI
1359 PLIST_ENTRY RegionListHead,
1360 PVOID Address,
1361 PVOID* RegionBaseAddress
1362);
1363
1364/* section.c *****************************************************************/
1365
1366#define PFN_FROM_SSE(E) ((PFN_NUMBER)((E) >> PAGE_SHIFT))
1367#define IS_SWAP_FROM_SSE(E) ((E) & 0x00000001)
1368#define MM_IS_WAIT_PTE(E) \
1369 (IS_SWAP_FROM_SSE(E) && SWAPENTRY_FROM_SSE(E) == MM_WAIT_ENTRY)
1370#define MAKE_PFN_SSE(P) ((ULONG_PTR)((P) << PAGE_SHIFT))
1371#define SWAPENTRY_FROM_SSE(E) ((E) >> 1)
1372#define MAKE_SWAP_SSE(S) (((ULONG_PTR)(S) << 1) | 0x1)
1373#define DIRTY_SSE(E) ((E) | 2)
1374#define CLEAN_SSE(E) ((E) & ~2)
1375#define IS_DIRTY_SSE(E) ((E) & 2)
1376#define WRITE_SSE(E) ((E) | 4)
1377#define IS_WRITE_SSE(E) ((E) & 4)
1378#ifdef _WIN64
1379#define PAGE_FROM_SSE(E) ((E) & 0xFFFFFFF000ULL)
1380#else
1381#define PAGE_FROM_SSE(E) ((E) & 0xFFFFF000)
1382#endif
1383#define SHARE_COUNT_FROM_SSE(E) (((E) & 0x00000FFC) >> 3)
1384#define MAX_SHARE_COUNT 0x1FF
1385#define MAKE_SSE(P, C) ((ULONG_PTR)((P) | ((C) << 3)))
1386#define BUMPREF_SSE(E) (PAGE_FROM_SSE(E) | ((SHARE_COUNT_FROM_SSE(E) + 1) << 3) | ((E) & 0x7))
1387#define DECREF_SSE(E) (PAGE_FROM_SSE(E) | ((SHARE_COUNT_FROM_SSE(E) - 1) << 3) | ((E) & 0x7))
1388
1389VOID
1390NTAPI
1392 const char *file,
1393 int line);
1394
1395#define MmLockSectionSegment(x) _MmLockSectionSegment(x,__FILE__,__LINE__)
1396
1397VOID
1398NTAPI
1400 const char *file,
1401 int line);
1402
1403#define MmUnlockSectionSegment(x) _MmUnlockSectionSegment(x,__FILE__,__LINE__)
1404
1405VOID
1406NTAPI
1408 OUT PSECTION_IMAGE_INFORMATION ImageInformation
1409);
1410
1412NTAPI
1414 IN PVOID Section
1415);
1417NTAPI
1421);
1422
1424NTAPI
1426 IN PVOID Section,
1428);
1429
1431NTAPI
1434 PVOID Address,
1437);
1438
1440NTAPI
1445 SIZE_T Length,
1446 ULONG Protect,
1447 PULONG OldProtect
1448);
1449
1450CODE_SEG("INIT")
1452NTAPI
1454
1456NTAPI
1460 PVOID Address,
1462);
1463
1465NTAPI
1469 PVOID Address,
1471);
1472
1473CODE_SEG("INIT")
1475NTAPI
1477
1479NTAPI
1483 PVOID Address,
1485);
1486
1487VOID
1488NTAPI
1490
1491/* Exported from NT 6.2 onward. We keep it internal. */
1493NTAPI
1495 _In_ PVOID Section,
1500
1501BOOLEAN
1502NTAPI
1506 _In_ ULONG Length);
1507
1509NTAPI
1513 _In_ ULONG Length);
1514
1516NTAPI
1522
1524NTAPI
1529 _In_ PLARGE_INTEGER ValidDataLength);
1530
1531BOOLEAN
1532NTAPI
1536 _In_ ULONG Length);
1537
1538BOOLEAN
1539NTAPI
1545
1546BOOLEAN
1547NTAPI
1551 BOOLEAN Dirty,
1553 ULONG_PTR *InEntry);
1554
1560VOID
1561NTAPI
1562MmDereferenceSegmentWithLock(
1565
1569VOID
1570MmDereferenceSegment(PMM_SECTION_SEGMENT Segment)
1571{
1572 MmDereferenceSegmentWithLock(Segment, MM_NOIRQL);
1573}
1574
1576NTAPI
1578 _In_ PVOID Section,
1580
1581/* sptab.c *******************************************************************/
1582
1584NTAPI
1588 const char *file,
1589 int line);
1590
1592NTAPI
1595 const char *file,
1596 int line);
1597
1598#define MmSetPageEntrySectionSegment(S,O,E) _MmSetPageEntrySectionSegment(S,O,E,__FILE__,__LINE__)
1599
1600#define MmGetPageEntrySectionSegment(S,O) _MmGetPageEntrySectionSegment(S,O,__FILE__,__LINE__)
1601
1602/* sysldr.c ******************************************************************/
1603
1604CODE_SEG("INIT")
1605VOID
1606NTAPI
1608 IN PLOADER_PARAMETER_BLOCK LoaderBlock
1609);
1610
1611CODE_SEG("INIT")
1612BOOLEAN
1613NTAPI
1615 IN PLOADER_PARAMETER_BLOCK LoaderBlock
1616);
1617
1618BOOLEAN
1619NTAPI
1621
1622VOID
1623NTAPI
1625
1627NTAPI
1630 IN PUNICODE_STRING NamePrefix OPTIONAL,
1631 IN PUNICODE_STRING LoadedName OPTIONAL,
1632 IN ULONG Flags,
1633 OUT PVOID *ModuleObject,
1634 OUT PVOID *ImageBaseAddress
1635);
1636
1638NTAPI
1640 IN PVOID ImageHandle
1641);
1642
1643#ifdef CONFIG_SMP
1644BOOLEAN
1645NTAPI
1646MmVerifyImageIsOkForMpUse(
1648#endif // CONFIG_SMP
1649
1651NTAPI
1653 _In_ HANDLE ImageHandle);
1654
1656NTAPI
1658 _In_ PLDR_DATA_TABLE_ENTRY LdrEntry,
1660
1661VOID
1662NTAPI
1664 IN PLDR_DATA_TABLE_ENTRY LdrEntry);
1665
1666/* ReactOS-only, used by psmgr.c PspLookupSystemDllEntryPoint() as well */
1668NTAPI
1670 _In_ PVOID ImageBase,
1671 _In_ PCSTR ExportName,
1673 _Out_opt_ PBOOLEAN IsForwarder,
1674 _In_ NTSTATUS NotFoundStatus);
1675
1676/* Exported from NT 10.0 onward. We keep it internal. */
1677PVOID
1678NTAPI
1680 _In_ PVOID ImageBase,
1681 _In_ PCSTR ExportName);
1682
1683/* procsup.c *****************************************************************/
1684
1686NTAPI
1688 IN PVOID StackPointer
1689);
1690
1691
1693VOID
1695{
1696 ASSERT(!PsGetCurrentThread()->OwnsProcessWorkingSetExclusive);
1697 ASSERT(!PsGetCurrentThread()->OwnsProcessWorkingSetShared);
1698 ASSERT(!PsGetCurrentThread()->OwnsSystemWorkingSetExclusive);
1699 ASSERT(!PsGetCurrentThread()->OwnsSystemWorkingSetShared);
1700 ASSERT(!PsGetCurrentThread()->OwnsSessionWorkingSetExclusive);
1701 ASSERT(!PsGetCurrentThread()->OwnsSessionWorkingSetShared);
1702 KeAcquireGuardedMutex(&CONTAINING_RECORD(AddressSpace, EPROCESS, Vm)->AddressCreationLock);
1703}
1704
1706VOID
1708{
1709 KeReleaseGuardedMutex(&CONTAINING_RECORD(AddressSpace, EPROCESS, Vm)->AddressCreationLock);
1710}
1711
1715{
1716 if (AddressSpace == MmKernelAddressSpace) return NULL;
1718}
1719
1723{
1724 return &((PEPROCESS)KeGetCurrentThread()->ApcState.Process)->Vm;
1725}
1726
1730{
1731 return MmKernelAddressSpace;
1732}
1733
1734
1735/* expool.c ******************************************************************/
1736
1737VOID
1738NTAPI
1740 PVOID P,
1742 ULONG Tag);
1743
1744VOID
1745NTAPI
1747 IN PVOID P);
1748
1749
1750/* mmsup.c *****************************************************************/
1751
1753NTAPI
1755 IN SIZE_T WorkingSetMinimumInBytes,
1756 IN SIZE_T WorkingSetMaximumInBytes,
1757 IN ULONG SystemCache,
1758 IN BOOLEAN IncreaseOkay);
1759
1760
1761/* session.c *****************************************************************/
1762
1765NTAPI
1766MmAttachSession(
1767 _Inout_ PVOID SessionEntry,
1769
1771VOID
1772NTAPI
1773MmDetachSession(
1774 _Inout_ PVOID SessionEntry,
1776
1777VOID
1778NTAPI
1780 _Inout_ PVOID SessionEntry);
1781
1782PVOID
1783NTAPI
1786
1788VOID
1789NTAPI
1790MmSetSessionLocaleId(
1792
1793/* shutdown.c *****************************************************************/
1794
1795VOID
1797
1798/* virtual.c *****************************************************************/
1799
1801NTAPI
1802MmCopyVirtualMemory(IN PEPROCESS SourceProcess,
1804 IN PEPROCESS TargetProcess,
1808 OUT PSIZE_T ReturnSize);
1809
1810/* wslist.cpp ****************************************************************/
1811_Requires_exclusive_lock_held_(WorkingSet->WorkingSetMutex)
1812VOID
1813NTAPI
1815
1816#ifdef __cplusplus
1817} // extern "C"
1818
1819namespace ntoskrnl
1820{
1821using MiPfnLockGuard = const KiQueuedSpinLockGuard<LockQueuePfnLock>;
1822} // namespace ntoskrnl
1823
1824#endif
#define CODE_SEG(...)
_In_ PVOID _In_ ULONG _Out_ PVOID _In_ ULONG _Inout_ PULONG _In_ KPROCESSOR_MODE PreviousMode
ULONG_PTR PFN_NUMBER
unsigned char BOOLEAN
Type
Definition: Type.h:7
#define VOID
Definition: acefi.h:82
ACPI_BUFFER *RetBuffer ACPI_BUFFER *RetBuffer char ACPI_WALK_RESOURCE_CALLBACK void *Context ACPI_BUFFER *RetBuffer UINT16 ACPI_RESOURCE **ResourcePtr ACPI_GENERIC_ADDRESS *Reg UINT32 *ReturnValue UINT8 UINT8 *Slp_TypB ACPI_PHYSICAL_ADDRESS PhysicalAddress64 UINT32 UINT32 *TimeElapsed UINT32 ACPI_STATUS const char UINT32 ACPI_STATUS const char UINT32 const char const char * ModuleName
Definition: acpixf.h:1280
LONG NTSTATUS
Definition: precomp.h:26
__int64 * PLONG64
Definition: basetsd.h:183
return
Definition: dirsup.c:529
_In_ CDROM_SCAN_FOR_SPECIAL_INFO _In_ PCDROM_SCAN_FOR_SPECIAL_HANDLER Function
Definition: cdrom.h:1156
Definition: bufpool.h:45
#define _Acquires_lock_(lock)
#define _Requires_lock_held_(lock)
#define _Requires_lock_not_held_(lock)
#define _Releases_lock_(lock)
#define _Requires_exclusive_lock_held_(lock)
#define RtlTestBit
Definition: dbgbitmap.h:347
#define NULL
Definition: types.h:112
#define P(row, col)
#define NTSTATUS
Definition: precomp.h:19
ULONG SessionId
Definition: dllmain.c:28
#define L(x)
Definition: resources.c:13
return Iosb
Definition: create.c:4403
#define _IRQL_requires_min_(irql)
Definition: driverspecs.h:231
#define _IRQL_requires_max_(irql)
Definition: driverspecs.h:230
#define _IRQL_restores_
Definition: driverspecs.h:233
#define _IRQL_requires_(irql)
Definition: driverspecs.h:229
#define _IRQL_saves_
Definition: driverspecs.h:235
#define _IRQL_raises_(irql)
Definition: driverspecs.h:228
UCHAR KIRQL
Definition: env_spec_w32.h:591
ULONG KSPIN_LOCK
Definition: env_spec_w32.h:72
#define PsGetCurrentThread()
Definition: env_spec_w32.h:81
#define APC_LEVEL
Definition: env_spec_w32.h:695
#define KeGetCurrentIrql()
Definition: env_spec_w32.h:706
KIRQL * PKIRQL
Definition: env_spec_w32.h:592
#define DISPATCH_LEVEL
Definition: env_spec_w32.h:696
#define InterlockedCompareExchangeSizeT(Destination, Exchange, Comperand)
Definition: ex.h:1556
_Must_inspect_result_ _In_ USHORT NewSize
Definition: fltkernel.h:975
_Must_inspect_result_ _In_ PDEVICE_OBJECT _In_ PSECTION_OBJECT_POINTERS SectionObjectPointer
Definition: fsrtlfuncs.h:1369
_Must_inspect_result_ _In_ PLARGE_INTEGER _In_ PLARGE_INTEGER _In_ ULONG _In_ PFILE_OBJECT _In_ PVOID Process
Definition: fsrtlfuncs.h:223
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
VOID FASTCALL KeReleaseGuardedMutex(IN OUT PKGUARDED_MUTEX GuardedMutex)
Definition: gmutex.c:53
VOID FASTCALL KeAcquireGuardedMutex(IN PKGUARDED_MUTEX GuardedMutex)
Definition: gmutex.c:42
VOID FASTCALL KeReleaseQueuedSpinLock(IN KSPIN_LOCK_QUEUE_NUMBER LockNumber, IN KIRQL OldIrql)
Definition: spinlock.c:154
KIRQL FASTCALL KeAcquireQueuedSpinLock(IN KSPIN_LOCK_QUEUE_NUMBER LockNumber)
Definition: spinlock.c:108
#define KeGetCurrentThread
Definition: hal.h:55
_In_ ULONG Mode
Definition: hubbusif.h:303
#define InterlockedExchangeAddSizeT(a, b)
Definition: interlocked.h:211
LIST_ENTRY * ModuleListHead
Definition: kdpacket.c:23
#define ASSERT(a)
Definition: mode.c:44
unsigned __int64 ULONG64
Definition: imports.h:198
FORCEINLINE struct _KPRCB * KeGetCurrentPrcb(VOID)
Definition: ketypes.h:1187
_In_ HANDLE _Outptr_result_bytebuffer_ ViewSize PVOID * BaseAddress
Definition: mmfuncs.h:404
_In_ HANDLE _Outptr_result_bytebuffer_ ViewSize PVOID _In_ ULONG_PTR _In_ SIZE_T _Inout_opt_ PLARGE_INTEGER SectionOffset
Definition: mmfuncs.h:407
_In_ HANDLE _Outptr_result_bytebuffer_ ViewSize PVOID _In_ ULONG_PTR _In_ SIZE_T _Inout_opt_ PLARGE_INTEGER _Inout_ PSIZE_T ViewSize
Definition: mmfuncs.h:408
enum _MMLISTS MMLISTS
_In_ PMEMORY_AREA MemoryArea
Definition: newmm.h:207
_In_ PMEMORY_AREA _In_ PVOID _In_ BOOLEAN Locked
Definition: newmm.h:209
#define _Outptr_result_bytebuffer_(s)
Definition: no_sal2.h:288
#define _Out_opt_
Definition: no_sal2.h:214
#define _Inout_
Definition: no_sal2.h:162
#define _Success_(c)
Definition: no_sal2.h:84
#define _Inout_opt_
Definition: no_sal2.h:216
#define _Out_
Definition: no_sal2.h:160
#define _In_
Definition: no_sal2.h:158
#define _In_opt_
Definition: no_sal2.h:212
#define _When_(c, a)
Definition: no_sal2.h:38
struct _EPROCESS * PEPROCESS
Definition: nt_native.h:30
_In_ ULONG _In_ ULONG Offset
Definition: ntddpcm.h:101
_In_ ULONG _In_ ULONG _In_ ULONG Length
Definition: ntddpcm.h:102
struct _MMFREE_POOL_ENTRY * PMMFREE_POOL_ENTRY
PMMSUPPORT MmKernelAddressSpace
Definition: mminit.c:27
PVOID MmUnloadedDrivers
Definition: sysldr.c:30
PMM_SECTION_SEGMENT NTAPI MmGetSectionAssociation(PFN_NUMBER Page, PLARGE_INTEGER Offset)
Definition: sptab.c:374
VOID MmShutdownSystem(IN ULONG Phase)
Definition: shutdown.c:77
PFN_NUMBER MmResidentAvailablePages
Definition: freelist.c:27
NTSTATUS NTAPI MmInitializeHandBuiltProcess2(IN PEPROCESS Process)
Definition: procsup.c:1153
struct _MM_MEMORY_CONSUMER MM_MEMORY_CONSUMER
PMMPAGING_FILE MmPagingFile[MAX_PAGING_FILES]
Definition: pagefile.c:57
PFN_NUMBER NTAPI MmAllocPage(ULONG Consumer)
Definition: freelist.c:602
SIZE_T MmTotalPagedPoolQuota
Definition: pool.c:28
PVOID MmTriageActionTaken
Definition: drvmgmt.c:27
_In_ SIZE_T _Out_ PSIZE_T NewMaxQuota
Definition: mm.h:683
VOID NTAPI ExpCheckPoolAllocation(PVOID P, POOL_TYPE PoolType, ULONG Tag)
Definition: expool.c:296
BOOLEAN NTAPI MiInitializeLoadedModuleList(IN PLOADER_PARAMETER_BLOCK LoaderBlock)
Definition: sysldr.c:2242
FORCEINLINE PMMSUPPORT MmGetCurrentAddressSpace(VOID)
Definition: mm.h:1722
FORCEINLINE PMMPFN MiGetPfnEntry(IN PFN_NUMBER Pfn)
Definition: mm.h:1045
struct _MMPFNLIST MMPFNLIST
VOID NTAPI MmDeleteKernelStack(PVOID Stack, BOOLEAN GuiStack)
VOID NTAPI MmMakeKernelResourceSectionWritable(VOID)
Definition: sysldr.c:2362
enum _MI_PFN_USAGES MI_PFN_USAGES
#define MI_SET_PROCESS2(x)
Definition: mm.h:328
#define MM_NOIRQL
Definition: mm.h:70
_MI_PFN_USAGES
Definition: mm.h:332
@ MI_USAGE_NONPAGED_POOL_EXPANSION
Definition: mm.h:336
@ MI_USAGE_LEGACY_PAGE_DIRECTORY
Definition: mm.h:345
@ MI_USAGE_PAGE_FILE
Definition: mm.h:355
@ MI_USAGE_NOT_SET
Definition: mm.h:333
@ MI_USAGE_COW
Definition: mm.h:356
@ MI_USAGE_PEB_TEB
Definition: mm.h:341
@ MI_USAGE_PAGE_TABLE
Definition: mm.h:343
@ MI_USAGE_INIT_MEMORY
Definition: mm.h:354
@ MI_USAGE_VAD
Definition: mm.h:340
@ MI_USAGE_SYSTEM_PTE
Definition: mm.h:339
@ MI_USAGE_CONTINOUS_ALLOCATION
Definition: mm.h:347
@ MI_USAGE_PAGED_POOL
Definition: mm.h:334
@ MI_USAGE_MDL
Definition: mm.h:348
@ MI_USAGE_PFN_DATABASE
Definition: mm.h:352
@ MI_USAGE_ZERO_LOOP
Definition: mm.h:350
@ MI_USAGE_DRIVER_PAGE
Definition: mm.h:346
@ MI_USAGE_DEMAND_ZERO
Definition: mm.h:349
@ MI_USAGE_SECTION
Definition: mm.h:342
@ MI_USAGE_WSLE
Definition: mm.h:357
@ MI_USAGE_FREE_PAGE
Definition: mm.h:358
@ MI_USAGE_PAGE_DIRECTORY
Definition: mm.h:344
@ MI_USAGE_CACHE
Definition: mm.h:351
@ MI_USAGE_KERNEL_STACK_EXPANSION
Definition: mm.h:338
@ MI_USAGE_KERNEL_STACK
Definition: mm.h:337
@ MI_USAGE_NONPAGED_POOL
Definition: mm.h:335
@ MI_USAGE_BOOT_DRIVER
Definition: mm.h:353
FORCEINLINE VOID MmLockAddressSpace(PMMSUPPORT AddressSpace)
Definition: mm.h:1694
VOID NTAPI MmSetPageProtect(struct _EPROCESS *Process, PVOID Address, ULONG flProtect)
BOOLEAN NTAPI MmIsSessionAddress(IN PVOID Address)
Definition: session.c:48
KSPIN_LOCK MmPfnLock
Definition: krnlinit.c:45
NTSTATUS NTAPI MmLoadSystemImage(IN PUNICODE_STRING FileName, IN PUNICODE_STRING NamePrefix OPTIONAL, IN PUNICODE_STRING LoadedName OPTIONAL, IN ULONG Flags, OUT PVOID *ModuleObject, OUT PVOID *ImageBaseAddress)
Definition: sysldr.c:2949
VOID NTAPI MiUnmapPageInHyperSpace(IN PEPROCESS Process, IN PVOID Address, IN KIRQL OldIrql)
Definition: hypermap.c:91
struct _MM_PAGED_POOL_INFO * PMM_PAGED_POOL_INFO
PFILE_OBJECT NTAPI MmGetFileObjectForSection(IN PVOID Section)
Definition: section.c:1540
struct _MM_RMAP_ENTRY *NTAPI MmGetRmapListHeadPage(PFN_NUMBER Page)
Definition: freelist.c:459
VOID NTAPI MmFreeSectionSegments(PFILE_OBJECT FileObject)
NTSTATUS NTAPI MmCopyVirtualMemory(IN PEPROCESS SourceProcess, IN PVOID SourceAddress, IN PEPROCESS TargetProcess, OUT PVOID TargetAddress, IN SIZE_T BufferSize, IN KPROCESSOR_MODE PreviousMode, OUT PSIZE_T ReturnSize)
Definition: virtual.c:1271
NTSTATUS NTAPI MmInitializeProcessAddressSpace(IN PEPROCESS Process, IN PEPROCESS Clone OPTIONAL, IN PVOID Section OPTIONAL, IN OUT PULONG Flags, IN POBJECT_NAME_INFORMATION *AuditName OPTIONAL)
VOID NTAPI ExReturnPoolQuota(IN PVOID P)
Definition: expool.c:1852
NTSTATUS NTAPI MiReadPageFile(_In_ PFN_NUMBER Page, _In_ ULONG PageFileIndex, _In_ ULONG_PTR PageFileOffset)
Definition: pagefile.c:211
NTSTATUS NTAPI MmMakeSegmentDirty(_In_ PSECTION_OBJECT_POINTERS SectionObjectPointer, _In_ LONGLONG Offset, _In_ ULONG Length)
Definition: section.c:5037
VOID NTAPI MmDereferencePage(PFN_NUMBER Page)
Definition: freelist.c:566
VOID NTAPI MmGetPageFileMapping(PEPROCESS Process, PVOID Address, SWAPENTRY *SwapEntry)
Definition: page.c:299
ULONG NTAPI MmGetPageProtect(struct _EPROCESS *Process, PVOID Address)
SIZE_T MmTotalCommitLimit
Definition: mminit.c:359
struct _MMPFNLIST * PMMPFNLIST
ULONG NTAPI MmGetSessionId(IN PEPROCESS Process)
Definition: session.c:179
NTSTATUS NTAPI MmGetFileNameForSection(IN PVOID Section, OUT POBJECT_NAME_INFORMATION *ModuleName)
Definition: section.c:1670
NTSTATUS NTAPI MmCreateMemoryArea(PMMSUPPORT AddressSpace, ULONG Type, PVOID *BaseAddress, SIZE_T Length, ULONG Protection, PMEMORY_AREA *Result, ULONG AllocationFlags, ULONG AllocationGranularity)
Definition: marea.c:379
VOID NTAPI MmCleanProcessAddressSpace(IN PEPROCESS Process)
Definition: procsup.c:1263
POOL_TYPE NTAPI MmDeterminePoolType(IN PVOID VirtualAddress)
Definition: pool.c:408
MM_MEMORY_CONSUMER MiMemoryConsumers[MC_MAXIMUM]
Definition: balance.c:28
VOID NTAPI MmReferencePage(PFN_NUMBER Page)
Definition: freelist.c:519
PMMPTE MmDebugPte
Definition: mmdbg.c:31
_In_ SIZE_T CurrentMaxQuota
Definition: mm.h:681
SIZE_T MmTotalNonPagedPoolQuota
Definition: pool.c:27
NTSTATUS NTAPI MmCheckSystemImage(_In_ HANDLE ImageHandle)
Definition: sysldr.c:2754
NTSTATUS NTAPI MmNotPresentFaultSectionView(PMMSUPPORT AddressSpace, MEMORY_AREA *MemoryArea, PVOID Address, BOOLEAN Locked)
Definition: section.c:1537
ULONG NTAPI MmGetSessionLocaleId(VOID)
Definition: session.c:56
NTSTATUS NTAPI MmAdjustWorkingSetSize(IN SIZE_T WorkingSetMinimumInBytes, IN SIZE_T WorkingSetMaximumInBytes, IN ULONG SystemCache, IN BOOLEAN IncreaseOkay)
Definition: mmsup.c:44
LIST_ENTRY MmLoadedUserImageList
Definition: sysldr.c:22
PFN_COUNT MmNumberOfPhysicalPages
Definition: init.c:48
NTSTATUS NTAPI MmCreateVirtualMappingUnsafe(struct _EPROCESS *Process, PVOID Address, ULONG flProtect, PFN_NUMBER Page)
ULONG MmThrottleTop
Definition: mminit.c:396
NTSTATUS NTAPI MmCreateTeb(IN PEPROCESS Process, IN PCLIENT_ID ClientId, IN PINITIAL_TEB InitialTeb, OUT PTEB *BaseTeb)
Definition: procsup.c:753
struct _MM_RMAP_ENTRY * PMM_RMAP_ENTRY
VOID NTAPI MmRebalanceMemoryConsumers(VOID)
Definition: balance.c:290
PVOID NTAPI MiMapPageInHyperSpace(IN PEPROCESS Process, IN PFN_NUMBER Page, IN PKIRQL OldIrql)
Definition: hypermap.c:28
VOID NTAPI MmBuildMdlFromPages(PMDL Mdl, PPFN_NUMBER Pages)
Definition: pagefile.c:111
_In_ PVOID _Out_opt_ BOOLEAN * WasDirty
Definition: mm.h:1302
NTSTATUS NTAPI MmFreeMemoryArea(PMMSUPPORT AddressSpace, PMEMORY_AREA MemoryArea, PMM_FREE_PAGE_FUNC FreePage, PVOID FreePageContext)
Definition: marea.c:258
VOID NTAPI MiInitializeNonPagedPool(VOID)
Definition: pool.c:278
FORCEINLINE PFN_NUMBER MiGetPfnEntryIndex(IN PMMPFN Pfn1)
Definition: mm.h:1065
MMPFNLIST MmStandbyPageListHead
Definition: pfnlist.c:43
#define MmSetCleanPage(__P, __A)
Definition: mm.h:1249
ULONG NTAPI MmGetSessionIdEx(IN PEPROCESS Process)
Definition: session.c:194
struct _MEMORY_AREA MEMORY_AREA
PMMPFN MmPfnDatabase
Definition: freelist.c:24
VOID NTAPI MmInitializeBalancer(ULONG NrAvailablePages, ULONG NrSystemPages)
Definition: balance.c:44
PFN_COUNT MiFreeSwapPages
Definition: pagefile.c:66
BOOLEAN NTAPI MmIsPageSwapEntry(struct _EPROCESS *Process, PVOID Address)
struct _MMPFN MMPFN
VOID NTAPI _MmUnlockSectionSegment(PMM_SECTION_SEGMENT Segment, const char *file, int line)
Definition: data.c:107
struct _MM_IMAGE_SECTION_OBJECT MM_IMAGE_SECTION_OBJECT
VOID NTAPI MmDumpArmPfnDatabase(IN BOOLEAN StatusOnly)
Definition: mminit.c:1465
BOOLEAN NTAPI MmIsFileObjectAPagingFile(PFILE_OBJECT FileObject)
Definition: pagefile.c:119
VOID NTAPI MmFreeDriverInitialization(IN PLDR_DATA_TABLE_ENTRY LdrEntry)
Definition: sysldr.c:1673
struct _MMPFN * PMMPFN
BOOLEAN NTAPI MmIsDisabledPage(struct _EPROCESS *Process, PVOID Address)
PVOID NTAPI MiAllocatePoolPages(IN POOL_TYPE PoolType, IN SIZE_T SizeInBytes)
Definition: pool.c:422
BOOLEAN NTAPI MmPurgeSegment(_In_ PSECTION_OBJECT_POINTERS SectionObjectPointer, _In_opt_ PLARGE_INTEGER Offset, _In_ ULONG Length)
Definition: section.c:4880
BOOLEAN NTAPI MmUnsharePageEntrySectionSegment(PMEMORY_AREA MemoryArea, PMM_SECTION_SEGMENT Segment, PLARGE_INTEGER Offset, BOOLEAN Dirty, BOOLEAN PageOut, ULONG_PTR *InEntry)
Definition: section.c:1089
NTSTATUS NTAPI MmQuerySectionView(PMEMORY_AREA MemoryArea, PVOID Address, PMEMORY_BASIC_INFORMATION Info, PSIZE_T ResultLength)
Definition: section.c:2112
NTSTATUS NTAPI MmProtectSectionView(PMMSUPPORT AddressSpace, PMEMORY_AREA MemoryArea, PVOID BaseAddress, SIZE_T Length, ULONG Protect, PULONG OldProtect)
Definition: section.c:2068
MMPFNLIST MmModifiedPageListHead
Definition: pfnlist.c:45
struct _MMPAGING_FILE * PMMPAGING_FILE
#define MI_PTE_FRAME_BITS
Definition: mm.h:384
_In_ PVOID _Out_opt_ BOOLEAN _Out_opt_ PPFN_NUMBER Page
Definition: mm.h:1304
NTSTATUS NTAPI _MmSetPageEntrySectionSegment(PMM_SECTION_SEGMENT Segment, PLARGE_INTEGER Offset, ULONG_PTR Entry, const char *file, int line)
Definition: sptab.c:178
SWAPENTRY NTAPI MmAllocSwapPage(VOID)
Definition: pagefile.c:322
struct _MM_PAGED_POOL_INFO MM_PAGED_POOL_INFO
PMEMORY_AREA NTAPI MmLocateMemoryAreaByAddress(PMMSUPPORT AddressSpace, PVOID Address)
Definition: marea.c:61
VOID NTAPI MiReloadBootLoadedDrivers(IN PLOADER_PARAMETER_BLOCK LoaderBlock)
Definition: sysldr.c:1731
struct _MM_IMAGE_SECTION_OBJECT * PMM_IMAGE_SECTION_OBJECT
VOID NTAPI MiRosCleanupMemoryArea(PEPROCESS Process, PMMVAD Vad)
Definition: marea.c:493
PFN_NUMBER NTAPI MmGetLRUFirstUserPage(VOID)
Definition: freelist.c:45
MMPFNLIST MmZeroedPageListHead
Definition: pfnlist.c:41
VOID NTAPI MmDeleteProcessAddressSpace(IN PEPROCESS Process)
Definition: procsup.c:1357
NTSTATUS MmTrimUserMemory(ULONG Target, ULONG Priority, PULONG NrFreedPages)
Definition: balance.c:138
NTSTATUS NTAPI MmDbgCopyMemory(IN ULONG64 Address, IN PVOID Buffer, IN ULONG Size, IN ULONG Flags)
Definition: mmdbg.c:124
VOID NTAPI MmGetImageInformation(OUT PSECTION_IMAGE_INFORMATION ImageInformation)
Definition: section.c:1617
VOID NTAPI MiUnmapPagesInZeroSpace(IN PVOID VirtualAddress, IN PFN_NUMBER NumberOfPages)
Definition: hypermap.c:187
VOID NTAPI MmSetDirtyBit(PEPROCESS Process, PVOID Address, BOOLEAN Bit)
Definition: page.c:890
BOOLEAN NTAPI MmCheckDirtySegment(PMM_SECTION_SEGMENT Segment, PLARGE_INTEGER Offset, BOOLEAN ForceDirty, BOOLEAN PageOut)
NTSTATUS NTAPI MmCreatePeb(IN PEPROCESS Process, IN PINITIAL_PEB InitialPeb, OUT PPEB *BasePeb)
Definition: procsup.c:518
struct _MM_SECTION_SEGMENT MM_SECTION_SEGMENT
VOID NTAPI MmQuitNextSession(_Inout_ PVOID SessionEntry)
Definition: session.c:1030
SIZE_T MmDriverCommit
Definition: freelist.c:32
NTSTATUS NTAPI RtlpFindExportedRoutineByName(_In_ PVOID ImageBase, _In_ PCSTR ExportName, _Out_ PVOID *Function, _Out_opt_ PBOOLEAN IsForwarder, _In_ NTSTATUS NotFoundStatus)
ReactOS-only helper routine for RtlFindExportedRoutineByName(), that provides a finer granularity reg...
Definition: sysldr.c:309
VOID NTAPI MiInitBalancerThread(VOID)
Definition: balance.c:426
PVOID MmLastUnloadedDrivers
Definition: sysldr.c:31
NTSTATUS NTAPI MmWriteToSwapPage(SWAPENTRY SwapEntry, PFN_NUMBER Page)
Definition: pagefile.c:147
VOID NTAPI MmInitializeRegion(PLIST_ENTRY RegionListHead, SIZE_T Length, ULONG Type, ULONG Protect)
Definition: region.c:239
SIZE_T MmProcessCommit
Definition: freelist.c:33
NTSTATUS NTAPI MmCallDllInitialize(_In_ PLDR_DATA_TABLE_ENTRY LdrEntry, _In_ PLIST_ENTRY ModuleListHead)
Definition: sysldr.c:433
NTSTATUS NTAPI MmInitializeHandBuiltProcess(IN PEPROCESS Process, IN PULONG_PTR DirectoryTableBase)
Definition: procsup.c:1127
MM_DRIVER_VERIFIER_DATA MmVerifierData
Definition: drvmgmt.c:20
PMM_REGION NTAPI MmFindRegion(PVOID BaseAddress, PLIST_ENTRY RegionListHead, PVOID Address, PVOID *RegionBaseAddress)
Definition: region.c:257
VOID NTAPI MmDeleteAllRmaps(PFN_NUMBER Page, PVOID Context, VOID(*DeleteMapping)(PVOID Context, struct _EPROCESS *Process, PVOID Address))
PFN_NUMBER MmLowestPhysicalPage
Definition: meminit.c:30
NTSTATUS NTAPI MmAccessFaultSectionView(PMMSUPPORT AddressSpace, MEMORY_AREA *MemoryArea, PVOID Address, BOOLEAN Locked)
Definition: section.c:1915
FORCEINLINE VOID UpdateTotalCommittedPages(LONG Delta)
Definition: mm.h:869
struct _MEMORY_AREA * PMEMORY_AREA
UCHAR MmDisablePagingExecutive
Definition: mminit.c:25
ULONG_PTR SWAPENTRY
Definition: mm.h:57
NTSTATUS NTAPI MmUnloadSystemImage(IN PVOID ImageHandle)
Definition: sysldr.c:945
BOOLEAN NTAPI MmIsPageInUse(PFN_NUMBER Page)
Definition: freelist.c:559
NTSTATUS NTAPI MmSetExecuteOptions(IN ULONG ExecuteOptions)
Definition: pagfault.c:2695
PFN_NUMBER NTAPI MmGetPfnForProcess(struct _EPROCESS *Process, PVOID Address)
BOOLEAN NTAPI MmChangeKernelResourceSectionProtection(IN ULONG_PTR ProtectionMask)
Definition: sysldr.c:2331
MMPFNLIST MmModifiedNoWritePageListHead
Definition: pfnlist.c:47
NTSTATUS NTAPI MmGrowKernelStack(IN PVOID StackPointer)
Definition: procsup.c:477
FORCEINLINE VOID MmUnlockAddressSpace(PMMSUPPORT AddressSpace)
Definition: mm.h:1707
PVOID KernelVerifier
Definition: drvmgmt.c:28
struct _MM_REGION MM_REGION
PVOID NTAPI MmGetSessionById(_In_ ULONG SessionId)
Definition: session.c:1050
NTSTATUS NTAPI MmReadFromSwapPage(SWAPENTRY SwapEntry, PFN_NUMBER Page)
Definition: pagefile.c:204
VOID NTAPI MmDeletePageFileMapping(struct _EPROCESS *Process, PVOID Address, SWAPENTRY *SwapEntry)
BOOLEAN NTAPI MmIsSpecialPoolAddress(IN PVOID P)
PVOID NTAPI MiMapPagesInZeroSpace(IN PMMPFN Pfn1, IN PFN_NUMBER NumberOfPages)
Definition: hypermap.c:111
NTSTATUS NTAPI MmSetMemoryPriorityProcess(IN PEPROCESS Process, IN UCHAR MemoryPriority)
Definition: procsup.c:487
VOID NTAPI MmDeleteTeb(struct _EPROCESS *Process, PTEB Teb)
BOOLEAN NTAPI MmIsDataSectionResident(_In_ PSECTION_OBJECT_POINTERS SectionObjectPointer, _In_ LONGLONG Offset, _In_ ULONG Length)
Definition: section.c:4975
BOOLEAN NTAPI MmUseSpecialPool(IN SIZE_T NumberOfBytes, IN ULONG Tag)
VOID NTAPI MmInitializeMemoryConsumer(ULONG Consumer, NTSTATUS(*Trim)(ULONG Target, ULONG Priority, PULONG NrFreed))
Definition: balance.c:57
VOID(* PMM_FREE_PAGE_FUNC)(PVOID Context, PMEMORY_AREA MemoryArea, PVOID Address, PFN_NUMBER Page, SWAPENTRY SwapEntry, BOOLEAN Dirty)
Definition: mm.h:545
PFN_NUMBER MmHighestPhysicalPage
Definition: meminit.c:31
NTSTATUS NTAPI MmFlushSegment(_In_ PSECTION_OBJECT_POINTERS SectionObjectPointer, _In_opt_ PLARGE_INTEGER Offset, _In_ ULONG Length, _Out_opt_ PIO_STATUS_BLOCK Iosb)
Definition: section.c:5094
SIZE_T MmtotalCommitLimitMaximum
Definition: freelist.c:36
NTSTATUS NTAPI MmExtendSection(_In_ PVOID Section, _Inout_ PLARGE_INTEGER NewSize)
Definition: section.c:5426
NTSTATUS NTAPI MmInitSectionImplementation(VOID)
Definition: section.c:2307
PVOID MiDebugMapping
Definition: mmdbg.c:30
BOOLEAN NTAPI MmIsAddressRangeFree(_In_ PMMSUPPORT AddressSpace, _In_ PVOID Address, _In_ ULONG_PTR Length)
Definition: marea.c:111
FORCEINLINE PEPROCESS MmGetAddressSpaceOwner(IN PMMSUPPORT AddressSpace)
Definition: mm.h:1714
BOOLEAN NTAPI MmIsPagePresent(struct _EPROCESS *Process, PVOID Address)
struct _MMPAGING_FILE MMPAGING_FILE
VOID NTAPI MiInitializeSpecialPool(VOID)
Definition: special.c:123
ULONG NTAPI MmGetReferenceCountPage(PFN_NUMBER Page)
Definition: freelist.c:539
VOID NTAPI MmFreeSwapPage(SWAPENTRY Entry)
Definition: pagefile.c:291
_Out_ PKAPC_STATE ApcState
Definition: mm.h:1768
VOID NTAPI MmSetSavedSwapEntryPage(PFN_NUMBER Page, SWAPENTRY SavedSwapEntry)
Definition: freelist.c:484
NTSTATUS NTAPI MmGetFileNameForAddress(IN PVOID Address, OUT PUNICODE_STRING ModuleName)
Definition: section.c:1691
NTSTATUS NTAPI MmAlterRegion(PMMSUPPORT AddressSpace, PVOID BaseAddress, PLIST_ENTRY RegionListHead, PVOID StartAddress, SIZE_T Length, ULONG NewType, ULONG NewProtect, PMM_ALTER_REGION_FUNC AlterFunc)
Definition: region.c:108
VOID NTAPI MmZeroPageThread(VOID)
Definition: zeropage.c:36
PVOID NTAPI MmCreateKernelStack(BOOLEAN GuiStack, UCHAR Node)
struct _MM_MEMORY_CONSUMER * PMM_MEMORY_CONSUMER
PFN_NUMBER MmAvailablePages
Definition: freelist.c:26
NTSTATUS NTAPI MmRequestPageMemoryConsumer(ULONG Consumer, BOOLEAN MyWait, PPFN_NUMBER AllocatedPage)
Definition: balance.c:313
VOID NTAPI _MmLockSectionSegment(PMM_SECTION_SEGMENT Segment, const char *file, int line)
Definition: data.c:98
NTSTATUS NTAPI MmPageOutSectionView(PMMSUPPORT AddressSpace, PMEMORY_AREA MemoryArea, PVOID Address, ULONG_PTR Entry)
#define MC_MAXIMUM
Definition: mm.h:114
NTSTATUS NTAPI MmMakeDataSectionResident(_In_ PSECTION_OBJECT_POINTERS SectionObjectPointer, _In_ LONGLONG Offset, _In_ ULONG Length, _In_ PLARGE_INTEGER ValidDataLength)
Definition: section.c:5017
SWAPENTRY NTAPI MmGetSavedSwapEntryPage(PFN_NUMBER Page)
Definition: freelist.c:500
BOOLEAN MiArchCreateProcessAddressSpace(_In_ PEPROCESS Process, _In_ PULONG_PTR DirectoryTableBase)
Definition: procsup.c:21
NTSTATUS NTAPI MmCreatePhysicalMapping(_Inout_opt_ PEPROCESS Process, _In_ PVOID Address, _In_ ULONG flProtect, _In_ PFN_NUMBER Page)
Definition: page.c:735
ULONG MmThrottleBottom
Definition: mminit.c:397
struct _MM_RMAP_ENTRY MM_RMAP_ENTRY
BOOLEAN NTAPI MmIsSpecialPoolAddressFree(IN PVOID P)
PVOID NTAPI MmAllocateSpecialPool(IN SIZE_T NumberOfBytes, IN ULONG Tag, IN POOL_TYPE PoolType, IN ULONG SpecialType)
NTSTATUS NTAPI MmCreateVirtualMapping(struct _EPROCESS *Process, PVOID Address, ULONG flProtect, PFN_NUMBER Page)
NTSTATUS NTAPI MmCreatePageFileMapping(struct _EPROCESS *Process, PVOID Address, SWAPENTRY SwapEntry)
NTSTATUS NTAPI MmGetExecuteOptions(IN PULONG ExecuteOptions)
Definition: pagfault.c:2653
NTSTATUS NTAPI MmMapViewInSystemSpaceEx(_In_ PVOID Section, _Outptr_result_bytebuffer_(*ViewSize) PVOID *MappedBase, _Inout_ PSIZE_T ViewSize, _Inout_ PLARGE_INTEGER SectionOffset, _In_ ULONG_PTR Flags)
Definition: section.c:4492
NTSTATUS NTAPI MmAccessFault(IN ULONG FaultCode, IN PVOID Address, IN KPROCESSOR_MODE Mode, IN PVOID TrapInformation)
Definition: mmfault.c:220
VOID NTAPI MmDeleteRmap(PFN_NUMBER Page, struct _EPROCESS *Process, PVOID Address)
BOOLEAN NTAPI MmInitSystem(IN ULONG Phase, IN PLOADER_PARAMETER_BLOCK LoaderBlock)
Definition: mminit.c:206
VOID NTAPI MmFreeSpecialPool(IN PVOID P)
struct _MM_SECTION_SEGMENT * PMM_SECTION_SEGMENT
ULONG_PTR NTAPI _MmGetPageEntrySectionSegment(PMM_SECTION_SEGMENT Segment, PLARGE_INTEGER Offset, const char *file, int line)
Definition: sptab.c:280
SIZE_T MmPagedPoolCommit
Definition: freelist.c:34
VOID NTAPI MmInitializeRmapList(VOID)
Definition: rmap.c:38
PVOID NTAPI MmFindGap(PMMSUPPORT AddressSpace, SIZE_T Length, ULONG_PTR Granularity, BOOLEAN TopDown)
Definition: marea.c:190
SIZE_T MmSharedCommit
Definition: freelist.c:31
PVOID NTAPI RtlFindExportedRoutineByName(_In_ PVOID ImageBase, _In_ PCSTR ExportName)
Finds the address of a given named exported routine in a loaded image. Note that this function does n...
Definition: sysldr.c:401
ULONG MmNumberOfPagingFiles
Definition: pagefile.c:63
SIZE_T MmTotalCommittedPages
Definition: freelist.c:30
#define MAX_PAGING_FILES
Definition: mm.h:123
MMPFNLIST MmFreePageListHead
Definition: pfnlist.c:42
struct _MMFREE_POOL_ENTRY MMFREE_POOL_ENTRY
PFN_COUNT MiUsedSwapPages
Definition: pagefile.c:69
PFN_NUMBER NTAPI MmGetLRUNextUserPage(PFN_NUMBER PreviousPage, BOOLEAN MoveToLast)
Definition: freelist.c:125
ULONG NTAPI MiFreePoolPages(IN PVOID StartingAddress)
Definition: pool.c:918
KMUTANT MmSystemLoadLock
Definition: sysldr.c:26
SIZE_T MmPeakCommitment
Definition: freelist.c:35
NTSTATUS NTAPI MmReleasePageMemoryConsumer(ULONG Consumer, PFN_NUMBER Page)
Definition: balance.c:72
FORCEINLINE PMMSUPPORT MmGetKernelAddressSpace(VOID)
Definition: mm.h:1729
VOID NTAPI MmInitGlobalKernelPageDirectory(VOID)
Definition: page.c:277
VOID NTAPI MmInsertRmap(PFN_NUMBER Page, struct _EPROCESS *Process, PVOID Address)
struct _MMPFNENTRY MMPFNENTRY
BOOLEAN NTAPI MmCreateProcessAddressSpace(IN ULONG MinWs, IN PEPROCESS Dest, IN PULONG_PTR DirectoryTableBase)
Definition: page.c:136
NTSTATUS NTAPI MmPageOutPhysicalAddress(PFN_NUMBER Page)
Definition: rmap.c:51
_In_ SIZE_T QuotaToReturn
Definition: mm.h:691
PMEMORY_AREA NTAPI MmLocateMemoryAreaByRegion(PMMSUPPORT AddressSpace, PVOID Address, SIZE_T Length)
Definition: marea.c:71
VOID(* PMM_ALTER_REGION_FUNC)(PMMSUPPORT AddressSpace, PVOID BaseAddress, SIZE_T Length, ULONG OldType, ULONG OldProtect, ULONG NewType, ULONG NewProtect)
Definition: mm.h:534
NTSTATUS NTAPI MmCreatePhysicalMemorySection(VOID)
Definition: section.c:2216
struct _MM_REGION * PMM_REGION
VOID NTAPI MmSetRmapListHeadPage(PFN_NUMBER Page, struct _MM_RMAP_ENTRY *ListHead)
VOID NTAPI MmInitPagingFile(VOID)
Definition: pagefile.c:272
#define MI_SET_PROCESS(x)
Definition: mm.h:327
VOID NTAPI MmDeletePageTable(struct _EPROCESS *Process, PVOID Address)
VOID NTAPI MmShowOutOfSpaceMessagePagingFile(VOID)
Definition: pagefile.c:136
RTL_BITMAP MiPfnBitMap
Definition: init.c:44
VOID NTAPI MmDeleteVirtualMapping(IN PEPROCESS Process, IN PVOID Address, OUT PBOOLEAN WasDirty, OUT PPFN_NUMBER Page)
Definition: page.c:177
long LONG
Definition: pedump.c:60
unsigned short USHORT
Definition: pedump.c:61
ULONG MI_PFN_CURRENT_USAGE
Definition: pfnlist.c:63
CHAR MI_PFN_CURRENT_PROCESS_NAME[16]
Definition: pfnlist.c:64
static WCHAR Address[46]
Definition: ping.c:68
static KSPIN_LOCK PspQuotaLock
Definition: quota.c:18
DWORD LCID
Definition: nls.h:13
ULONG * PPFN_NUMBER
Definition: ke.h:9
PLARGE_INTEGER BOOLEAN BOOLEAN PageOut
Definition: section.c:5180
PLARGE_INTEGER BOOLEAN ForceDirty
Definition: section.c:5178
STDMETHOD() Clone(THIS_ IEnumAssociationElements **ppNew) PURE
PULONG MinorVersion OPTIONAL
Definition: CrossNt.h:68
base of all file and directory entries
Definition: entries.h:83
Definition: btrfs_drv.h:1876
Definition: typedefs.h:120
LONGLONG ViewOffset
Definition: mm.h:263
PMM_SECTION_SEGMENT Segment
Definition: mm.h:264
LIST_ENTRY RegionListHead
Definition: mm.h:265
struct _MEMORY_AREA::@1926 SectionData
ULONG Flags
Definition: mm.h:257
ULONG Magic
Definition: mm.h:259
BOOLEAN DeleteInProgress
Definition: mm.h:258
ULONG Type
Definition: mm.h:256
MMVAD VadNode
Definition: mm.h:254
Definition: mm.h:491
ULONG Signature
Definition: mm.h:494
struct _MMFREE_POOL_ENTRY * Owner
Definition: mm.h:495
PFN_COUNT Size
Definition: mm.h:493
LIST_ENTRY List
Definition: mm.h:492
PFN_NUMBER MinimumSize
Definition: mm.h:521
UNICODE_STRING PageFileName
Definition: mm.h:525
PFN_NUMBER Size
Definition: mm.h:519
PRTL_BITMAP Bitmap
Definition: mm.h:526
PFN_NUMBER CurrentUsage
Definition: mm.h:523
PFN_NUMBER FreeSpace
Definition: mm.h:522
PFILE_OBJECT FileObject
Definition: mm.h:524
PFN_NUMBER MaximumSize
Definition: mm.h:520
HANDLE FileHandle
Definition: mm.h:527
USHORT RemovalRequested
Definition: mm.h:375
USHORT CacheAttribute
Definition: mm.h:376
USHORT PageColor
Definition: mm.h:373
USHORT PrototypePte
Definition: mm.h:372
USHORT Modified
Definition: mm.h:369
USHORT ReadInProgress
Definition: mm.h:370
USHORT PageLocation
Definition: mm.h:374
USHORT Rom
Definition: mm.h:377
USHORT ParityError
Definition: mm.h:378
USHORT WriteInProgress
Definition: mm.h:371
Definition: mm.h:460
PFN_NUMBER Total
Definition: mm.h:461
MMLISTS ListName
Definition: mm.h:462
PFN_NUMBER Blink
Definition: mm.h:464
PFN_NUMBER Flink
Definition: mm.h:463
Definition: mm.h:389
PMM_RMAP_ENTRY RmapListHead
Definition: mm.h:429
MMPTE OriginalPte
Definition: mm.h:425
struct _MMPFN::@1929::@1935 e2
MMWSLE Wsle
Definition: mm.h:452
ULONG_PTR MustBeCached
Definition: mm.h:441
SINGLE_LIST_ENTRY NextStackPfn
Definition: mm.h:396
struct _MMPFN * NextLRU
Definition: mm.h:453
PFN_NUMBER Blink
Definition: mm.h:404
union _MMPFN::@1928 u2
PMMPTE PteAddress
Definition: mm.h:401
NTSTATUS ReadStatus
Definition: mm.h:395
LONG AweReferenceCount
Definition: mm.h:426
PFN_NUMBER Flink
Definition: mm.h:392
union _MMPFN::@1927 u1
ULONG WsIndex
Definition: mm.h:393
MMPFNENTRY e1
Definition: mm.h:412
union _MMPFN::@1932 u4
ULONG_PTR VerifierAllocation
Definition: mm.h:438
ULONG_PTR ShareCount
Definition: mm.h:405
ULONG_PTR EntireFrame
Definition: mm.h:433
union _MMPFN::@1929 u3
struct _MMPFN * PreviousLRU
Definition: mm.h:454
ULONG_PTR InPageError
Definition: mm.h:437
ULONG_PTR Priority
Definition: mm.h:440
PKEVENT Event
Definition: mm.h:394
USHORT ReferenceCount
Definition: mm.h:411
USHORT ShortFlags
Definition: mm.h:417
SWAPENTRY SwapEntry
Definition: mm.h:399
ULONG_PTR AweAllocation
Definition: mm.h:439
ULONG_PTR PteFrame
Definition: mm.h:436
PMM_SECTION_SEGMENT Segments
Definition: mm.h:239
PFILE_OBJECT FileObject
Definition: mm.h:231
SECTION_IMAGE_INFORMATION ImageInformation
Definition: mm.h:236
NTSTATUS(* Trim)(ULONG Target, ULONG Priority, PULONG NrFreed)
Definition: mm.h:477
ULONG PagesTarget
Definition: mm.h:476
ULONG PagesUsed
Definition: mm.h:475
PMMPTE LastPteForPagedPool
Definition: mm.h:507
SIZE_T AllocatedPagedPool
Definition: mm.h:511
PRTL_BITMAP EndOfPagedPoolBitmap
Definition: mm.h:505
PRTL_BITMAP PagedPoolAllocationMap
Definition: mm.h:504
PMMPDE NextPdeForPagedPoolExpansion
Definition: mm.h:508
PMMPTE FirstPteForPagedPool
Definition: mm.h:506
ULONG PagedPoolHint
Definition: mm.h:509
SIZE_T PagedPoolCommit
Definition: mm.h:510
Definition: mm.h:481
LIST_ENTRY RegionListEntry
Definition: mm.h:485
ULONG Type
Definition: mm.h:482
SIZE_T Length
Definition: mm.h:484
ULONG Protect
Definition: mm.h:483
Definition: mm.h:275
PVOID Address
Definition: mm.h:278
PEPROCESS Process
Definition: mm.h:277
struct _MM_RMAP_ENTRY * Next
Definition: mm.h:276
LONG64 RefCount
Definition: mm.h:201
PULONG Flags
Definition: mm.h:210
ULONG_PTR VirtualAddress
Definition: mm.h:217
ULONG SectionCount
Definition: mm.h:208
LARGE_INTEGER RawLength
Definition: mm.h:205
struct _MM_SECTION_SEGMENT::@1925 Image
ULONGLONG LastPage
Definition: mm.h:223
BOOLEAN Locked
Definition: mm.h:212
PLONG64 ReferenceCount
Definition: mm.h:207
FAST_MUTEX Lock
Definition: mm.h:204
PFILE_OBJECT FileObject
Definition: mm.h:202
ULONGLONG FileOffset
Definition: mm.h:216
ULONG SegFlags
Definition: mm.h:221
BOOLEAN WriteCopy
Definition: mm.h:211
ULONG Protection
Definition: mm.h:209
ULONG Characteristics
Definition: mm.h:218
RTL_GENERIC_TABLE PageTable
Definition: mm.h:225
LARGE_INTEGER Length
Definition: mm.h:206
PULONG Buffer
Definition: typedefs.h:91
Definition: ntbasedef.h:640
Definition: compat.h:836
Definition: fci.c:127
Definition: parser.c:49
ULONG_PTR * PSIZE_T
Definition: typedefs.h:80
uint16_t * PWSTR
Definition: typedefs.h:56
uint32_t * PULONG_PTR
Definition: typedefs.h:65
uint32_t * PULONG
Definition: typedefs.h:59
int64_t LONG64
Definition: typedefs.h:68
unsigned char * PBOOLEAN
Definition: typedefs.h:53
INT POOL_TYPE
Definition: typedefs.h:78
int64_t LONGLONG
Definition: typedefs.h:68
#define NTAPI
Definition: typedefs.h:36
ULONG_PTR SIZE_T
Definition: typedefs.h:80
const char * PCSTR
Definition: typedefs.h:52
uint32_t ULONG_PTR
Definition: typedefs.h:65
#define IN
Definition: typedefs.h:39
#define CONTAINING_RECORD(address, type, field)
Definition: typedefs.h:260
uint32_t ULONG
Definition: typedefs.h:59
uint64_t ULONGLONG
Definition: typedefs.h:67
#define OUT
Definition: typedefs.h:40
Definition: dlist.c:348
_Must_inspect_result_ _In_ WDFCHILDLIST _In_ PWDF_CHILD_LIST_ITERATOR _Out_ WDFDEVICE _Inout_opt_ PWDF_CHILD_RETRIEVE_INFO Info
Definition: wdfchildlist.h:690
_Must_inspect_result_ _In_ WDFDEVICE _In_ DEVICE_REGISTRY_PROPERTY _In_ ULONG _Out_ PULONG ResultLength
Definition: wdfdevice.h:3776
_Must_inspect_result_ _In_ WDFDEVICE _In_ BOOLEAN _In_opt_ PVOID Tag
Definition: wdfdevice.h:4065
_Must_inspect_result_ _In_ WDFDEVICE _In_ DEVICE_REGISTRY_PROPERTY _In_ _Strict_type_match_ POOL_TYPE PoolType
Definition: wdfdevice.h:3815
_In_ WDFREQUEST _In_ WDFFILEOBJECT FileObject
Definition: wdfdevice.h:550
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_PROPERTY_DATA _In_ DEVPROPTYPE _In_ ULONG Size
Definition: wdfdevice.h:4533
_Must_inspect_result_ _In_ WDFDMATRANSACTION _In_ PFN_WDF_PROGRAM_DMA _In_ WDF_DMA_DIRECTION _In_ PMDL _In_ PVOID VirtualAddress
_In_ WDFDEVICE _In_ PVOID _In_opt_ PMDL Mdl
_In_ WDFINTERRUPT _In_ WDF_INTERRUPT_POLICY _In_ WDF_INTERRUPT_PRIORITY Priority
Definition: wdfinterrupt.h:655
_In_ WDFMEMORY _Out_opt_ size_t * BufferSize
Definition: wdfmemory.h:254
_Must_inspect_result_ _In_ PWDFDEVICE_INIT _In_ PCUNICODE_STRING _In_ PCUNICODE_STRING _In_ LCID LocaleId
Definition: wdfpdo.h:437
_In_ WDFIOTARGET Target
Definition: wdfrequest.h:306
_In_ WDFREQUEST _In_ PIO_STACK_LOCATION Stack
Definition: wdfrequest.h:639
#define FORCEINLINE
Definition: wdftypes.h:67
_At_(*)(_In_ PWSK_CLIENT Client, _In_opt_ PUNICODE_STRING NodeName, _In_opt_ PUNICODE_STRING ServiceName, _In_opt_ ULONG NameSpace, _In_opt_ GUID *Provider, _In_opt_ PADDRINFOEXW Hints, _Outptr_ PADDRINFOEXW *Result, _In_opt_ PEPROCESS OwningProcess, _In_opt_ PETHREAD OwningThread, _Inout_ PIRP Irp Result)(Mem)) NTSTATUS(WSKAPI *PFN_WSK_GET_ADDRESS_INFO
Definition: wsk.h:409
_Must_inspect_result_ _In_ ULONG Flags
Definition: wsk.h:170
_Use_decl_annotations_ VOID NTAPI MiInitializeWorkingSetList(_Inout_ PMMSUPPORT WorkingSet)
Definition: wslist.cpp:369
static ULONG Delta
Definition: xboxvideo.c:33
_Inout_ PVOID Segment
Definition: exfuncs.h:1101
FAST_MUTEX
Definition: extypes.h:17
_In_ ULONG _In_ PHYSICAL_ADDRESS _Inout_ PULONG AddressSpace
Definition: iofuncs.h:2274
_Must_inspect_result_ typedef _In_ PHYSICAL_ADDRESS _Inout_ PLARGE_INTEGER _Outptr_ PVOID * TargetAddress
Definition: iotypes.h:1037
* PFILE_OBJECT
Definition: iotypes.h:1998
_Must_inspect_result_ typedef _In_ PHYSICAL_ADDRESS SourceAddress
Definition: iotypes.h:1127
_Must_inspect_result_ typedef _In_ PHYSICAL_ADDRESS _Inout_ PLARGE_INTEGER NumberOfBytes
Definition: iotypes.h:1036
_Requires_lock_held_ Interrupt _Releases_lock_ Interrupt _In_ _IRQL_restores_ KIRQL OldIrql
Definition: kefuncs.h:778
_Out_ PCLIENT_ID ClientId
Definition: kefuncs.h:1151
@ FreePage
Definition: ketypes.h:416
CCHAR KPROCESSOR_MODE
Definition: ketypes.h:7
* PKAPC_STATE
Definition: ketypes.h:1588
@ LockQueuePfnLock
Definition: ketypes.h:660
_Must_inspect_result_ _Outptr_result_bytebuffer_ ViewSize PVOID * MappedBase
Definition: mmfuncs.h:492
_Must_inspect_result_ _In_ ULONG NewProtect
Definition: mmfuncs.h:682
ULONG PFN_COUNT
Definition: mmtypes.h:102
unsigned char UCHAR
Definition: xmlstorage.h:181
__wchar_t WCHAR
Definition: xmlstorage.h:180
char CHAR
Definition: xmlstorage.h:175
_In_ HANDLE _Outptr_result_bytebuffer_ ViewSize PVOID _In_ ULONG_PTR _In_ SIZE_T _Inout_opt_ PLARGE_INTEGER _Inout_ PSIZE_T _In_ SECTION_INHERIT _In_ ULONG _In_ ULONG Protect
Definition: zwfuncs.h:221