ReactOS 0.4.16-dev-2104-gb84fa49
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 PAGE_WRITECOMBINE)
150
151#define PAGE_IS_READABLE \
152 (PAGE_READONLY | \
153 PAGE_READWRITE | \
154 PAGE_WRITECOPY | \
155 PAGE_EXECUTE_READ | \
156 PAGE_EXECUTE_READWRITE | \
157 PAGE_EXECUTE_WRITECOPY)
158
159#define PAGE_IS_WRITABLE \
160 (PAGE_READWRITE | \
161 PAGE_WRITECOPY | \
162 PAGE_EXECUTE_READWRITE | \
163 PAGE_EXECUTE_WRITECOPY)
164
165#define PAGE_IS_EXECUTABLE \
166 (PAGE_EXECUTE | \
167 PAGE_EXECUTE_READ | \
168 PAGE_EXECUTE_READWRITE | \
169 PAGE_EXECUTE_WRITECOPY)
170
171#define PAGE_IS_WRITECOPY \
172 (PAGE_WRITECOPY | \
173 PAGE_EXECUTE_WRITECOPY)
174
175//
176// Wait entry for marking pages that are being serviced
177//
178#ifdef _M_IX86
179#define MM_WAIT_ENTRY 0x7ffffc00
180#elif defined(_M_AMD64)
181#define MM_WAIT_ENTRY 0x7FFFFFFFFFFFFC00ULL
182#else
183#error Unsupported architecture!
184#endif
185
186#ifdef _M_AMD64
187#define InterlockedCompareExchangePte(PointerPte, Exchange, Comperand) \
188 InterlockedCompareExchange64((PLONG64)(PointerPte), Exchange, Comperand)
189
190#define InterlockedExchangePte(PointerPte, Value) \
191 InterlockedExchange64((PLONG64)(PointerPte), Value)
192#else
193#define InterlockedCompareExchangePte(PointerPte, Exchange, Comperand) \
194 InterlockedCompareExchange((PLONG)(PointerPte), Exchange, Comperand)
195
196#define InterlockedExchangePte(PointerPte, Value) \
197 InterlockedExchange((PLONG)(PointerPte), Value)
198#endif
199
201{
204
205 FAST_MUTEX Lock; /* lock which protects the page directory */
206 LARGE_INTEGER RawLength; /* length of the segment which is part of the mapped file */
207 LARGE_INTEGER Length; /* absolute length of the segment */
214
215 struct
216 {
217 ULONGLONG FileOffset; /* start offset into the file for image sections */
218 ULONG_PTR VirtualAddress; /* start offset into the address range for image sections */
221
223
225
228
230{
236
242
243#define MM_PHYSICALMEMORY_SEGMENT (0x1)
244#define MM_DATAFILE_SEGMENT (0x2)
245#define MM_SEGMENT_INDELETE (0x4)
246#define MM_SEGMENT_INCREATE (0x8)
247#define MM_IMAGE_SECTION_FLUSH_DELETE (0x10)
248
249
250#define MA_GetStartingAddress(_MemoryArea) ((_MemoryArea)->VadNode.StartingVpn << PAGE_SHIFT)
251#define MA_GetEndingAddress(_MemoryArea) (((_MemoryArea)->VadNode.EndingVpn + 1) << PAGE_SHIFT)
252
253typedef struct _MEMORY_AREA
254{
256
261
262 struct
263 {
269
270#define MI_SET_MEMORY_AREA_VAD(Vad) do { (Vad)->u.VadFlags.Spare |= 1; } while (0)
271#define MI_IS_MEMORY_AREA_VAD(Vad) (((Vad)->u.VadFlags.Spare & 1) != 0)
272#define MI_SET_ROSMM_VAD(Vad) do { (Vad)->u.VadFlags.Spare |= 2; } while (0)
273#define MI_IS_ROSMM_VAD(Vad) (((Vad)->u.VadFlags.Spare & 2) != 0)
274
275typedef struct _MM_RMAP_ENTRY
276{
280#if DBG
281 PVOID Caller;
282#endif
283}
285
286#if MI_TRACE_PFNS
289#define MI_SET_USAGE(x) MI_PFN_CURRENT_USAGE = x
290#define MI_SET_PROCESS2(x) memcpy(MI_PFN_CURRENT_PROCESS_NAME, x, min(sizeof(x), sizeof(MI_PFN_CURRENT_PROCESS_NAME)))
292void
294{
295 if (!Process)
296 MI_SET_PROCESS2("Kernel");
297 else if (Process == (PEPROCESS)1)
298 MI_SET_PROCESS2("Hydra");
299 else
300 MI_SET_PROCESS2(Process->ImageFileName);
301}
302
304void
305MI_SET_PROCESS_USTR(PUNICODE_STRING ustr)
306{
307 PWSTR pos, strEnd;
308 ULONG i;
309
310 if (!ustr->Buffer || ustr->Length == 0)
311 {
313 return;
314 }
315
316 pos = strEnd = &ustr->Buffer[ustr->Length / sizeof(WCHAR)];
317 while ((*pos != L'\\') && (pos > ustr->Buffer))
318 pos--;
319
320 if (*pos == L'\\')
321 pos++;
322
323 for (i = 0; i < sizeof(MI_PFN_CURRENT_PROCESS_NAME) && pos <= strEnd; i++, pos++)
325}
326#else
327#define MI_SET_USAGE(x)
328#define MI_SET_PROCESS(x)
329#define MI_SET_PROCESS2(x)
330#endif
331
332typedef enum _MI_PFN_USAGES
333{
361
362//
363// These two mappings are actually used by Windows itself, based on the ASSERTS
364//
365#define StartOfAllocation ReadInProgress
366#define EndOfAllocation WriteInProgress
367
368typedef struct _MMPFNENTRY
369{
371 USHORT ReadInProgress:1; // StartOfAllocation
372 USHORT WriteInProgress:1; // EndOfAllocation
381
382#ifdef _WIN64
383#define MI_PTE_FRAME_BITS 57
384#else
385#define MI_PTE_FRAME_BITS 25
386#endif
387
388// Mm internal
389typedef struct _MMPFN
390{
391 union
392 {
398
399 // HACK for ROSPFN
401 } u1;
403 union
404 {
407 } u2;
408 union
409 {
410 struct
411 {
414 };
415 struct
416 {
419 } e2;
420 } u3;
421#ifdef _WIN64
422 ULONG UsedPageTableEntries;
423#endif
424 union
425 {
428
429 // HACK for ROSPFN
431 };
432 union
433 {
435 struct
436 {
443 };
444 } u4;
445#if MI_TRACE_PFNS
446 MI_PFN_USAGES PfnUsage;
447 CHAR ProcessName[16];
448#define MI_SET_PFN_PROCESS_NAME(pfn, x) memcpy(pfn->ProcessName, x, min(sizeof(x), sizeof(pfn->ProcessName)))
449 PVOID CallSite;
450#endif
451
452 // HACK until WS lists are supported
457
458extern PMMPFN MmPfnDatabase;
459
460typedef struct _MMPFNLIST
461{
467
473
475{
480
481typedef struct _MM_REGION
482{
488
489// Mm internal
490/* Entry describing free pool memory */
491typedef struct _MMFREE_POOL_ENTRY
492{
498
499/* Signature of a freed block */
500#define MM_FREE_POOL_SIGNATURE 'ARM3'
501
502/* Paged pool information */
504{
514
516
517/* Page file information */
518typedef struct _MMPAGING_FILE
519{
529}
531
533
534typedef VOID
539 ULONG OldType,
540 ULONG OldProtect,
541 ULONG NewType,
543);
544
545typedef VOID
551 SWAPENTRY SwapEntry,
552 BOOLEAN Dirty
553);
554
555//
556// Mm copy support for Kd
557//
559NTAPI
563 IN ULONG Size,
565);
566
567//
568// Determines if a given address is a session address
569//
571NTAPI
574);
575
576ULONG
577NTAPI
580);
581
582ULONG
583NTAPI
586);
587
588/* marea.c *******************************************************************/
589
591NTAPI
594 ULONG Type,
597 ULONG Protection,
599 ULONG AllocationFlags,
600 ULONG AllocationGranularity
601);
602
604NTAPI
608);
609
611NTAPI
616 PVOID FreePageContext
617);
618
619VOID
620NTAPI
623 PMMVAD Vad);
624
626NTAPI
631);
632
634NTAPI
639
640PVOID
641NTAPI
645 ULONG_PTR Granularity,
646 BOOLEAN TopDown
647);
648
649/* npool.c *******************************************************************/
650
651CODE_SEG("INIT")
652VOID
653NTAPI
655
656PVOID
657NTAPI
660 IN SIZE_T SizeInBytes
661);
662
664NTAPI
667);
668
669ULONG
670NTAPI
672 IN PVOID StartingAddress
673);
674
675/* pool.c *******************************************************************/
676
679NTAPI
680MmRaisePoolQuota(
684);
685
687VOID
688NTAPI
689MmReturnPoolQuota(
692);
693
694/* mdl.c *********************************************************************/
695
696VOID
697NTAPI
699 PMDL Mdl,
700 PPFN_NUMBER Pages
701);
702
703/* mminit.c ******************************************************************/
704
705CODE_SEG("INIT")
707NTAPI
708MmInitSystem(IN ULONG Phase,
709 IN PLOADER_PARAMETER_BLOCK LoaderBlock);
710
711
712/* pagefile.c ****************************************************************/
713
715NTAPI
717
718VOID
719NTAPI
721
722CODE_SEG("INIT")
723VOID
724NTAPI
726
728NTAPI
730
732NTAPI
734 SWAPENTRY SwapEntry,
736);
737
739NTAPI
741 SWAPENTRY SwapEntry,
743);
744
745VOID
746NTAPI
748
750NTAPI
753 _In_ ULONG PageFileIndex,
754 _In_ ULONG_PTR PageFileOffset);
755
756/* process.c ****************************************************************/
757
759NTAPI
763 IN PVOID Section OPTIONAL,
766);
767
769NTAPI
772 IN PINITIAL_PEB InitialPeb,
773 OUT PPEB *BasePeb
774);
775
777NTAPI
781 IN PINITIAL_TEB InitialTeb,
782 OUT PTEB* BaseTeb
783);
784
785VOID
786NTAPI
789 PTEB Teb
790);
791
792VOID
793NTAPI
795
796VOID
797NTAPI
799
800ULONG
801NTAPI
803
805NTAPI
808 IN UCHAR MemoryPriority
809);
810
811/* special.c *****************************************************************/
812
813VOID
814NTAPI
816
818NTAPI
821 IN ULONG Tag);
822
824NTAPI
826 IN PVOID P);
827
829NTAPI
831 IN PVOID P);
832
833PVOID
834NTAPI
837 IN ULONG Tag,
839 IN ULONG SpecialType);
840
841VOID
842NTAPI
844 IN PVOID P);
845
846/* mm.c **********************************************************************/
847
849NTAPI
851 IN ULONG FaultCode,
854 IN PVOID TrapInformation
855);
856
857/* process.c *****************************************************************/
858
859PVOID
860NTAPI
862
863VOID
864NTAPI
866 BOOLEAN GuiStack);
867
868/* balance.c / pagefile.c******************************************************/
869
871{
872 /*
873 * Add up all the used "Committed" memory + pagefile.
874 * Not sure this is right. 8^\
875 * MmTotalCommittedPages should be adjusted consistently with
876 * other counters at different places.
877 *
878 MmTotalCommittedPages = MiMemoryConsumers[MC_SYSTEM].PagesUsed +
879 MiMemoryConsumers[MC_USER].PagesUsed +
880 MiUsedSwapPages;
881 */
882
883 /* Update Commitment */
884 SIZE_T TotalCommittedPages = InterlockedExchangeAddSizeT(&MmTotalCommittedPages, Delta) + Delta;
885
886 /* Update Peak = max(Peak, Total) in a lockless way */
887 SIZE_T PeakCommitment = MmPeakCommitment;
888 while (TotalCommittedPages > PeakCommitment &&
889 InterlockedCompareExchangeSizeT(&MmPeakCommitment, TotalCommittedPages, PeakCommitment) != PeakCommitment)
890 {
891 PeakCommitment = MmPeakCommitment;
892 }
893}
894
895/* balance.c *****************************************************************/
896
897CODE_SEG("INIT")
898VOID
899NTAPI
901 ULONG Consumer,
902 NTSTATUS (*Trim)(ULONG Target, ULONG Priority, PULONG NrFreed)
903);
904
905CODE_SEG("INIT")
906VOID
907NTAPI
909 ULONG NrAvailablePages,
910 ULONG NrSystemPages
911);
912
914NTAPI
916 ULONG Consumer,
918);
919
921NTAPI
923 ULONG Consumer,
924 BOOLEAN MyWait,
925 PPFN_NUMBER AllocatedPage
926);
927
928CODE_SEG("INIT")
929VOID
930NTAPI
932
933VOID
934NTAPI
936
937/* rmap.c **************************************************************/
938#define RMAP_SEGMENT_MASK ~((ULONG_PTR)0xff)
939#define RMAP_IS_SEGMENT(x) (((ULONG_PTR)(x) & RMAP_SEGMENT_MASK) == RMAP_SEGMENT_MASK)
940
941VOID
942NTAPI
945 struct _MM_RMAP_ENTRY* ListHead
946);
947
948struct _MM_RMAP_ENTRY*
949NTAPI
951
952VOID
953NTAPI
956 struct _EPROCESS *Process,
958);
959
960VOID
961NTAPI
965 VOID (*DeleteMapping)(PVOID Context, struct _EPROCESS *Process, PVOID Address)
966);
967
968VOID
969NTAPI
972 struct _EPROCESS *Process,
974);
975
976CODE_SEG("INIT")
977VOID
978NTAPI
980
982NTAPI
984
986NTAPI
989
990/* freelist.c **********************************************************/
997KIRQL
998MiAcquirePfnLock(VOID)
999{
1001}
1002
1007VOID
1008MiReleasePfnLock(
1010{
1012}
1013
1018VOID
1019MiAcquirePfnLockAtDpcLevel(VOID)
1020{
1021 PKSPIN_LOCK_QUEUE LockQueue;
1022
1024 LockQueue = &KeGetCurrentPrcb()->LockQueue[LockQueuePfnLock];
1025 KeAcquireQueuedSpinLockAtDpcLevel(LockQueue);
1026}
1027
1032VOID
1033MiReleasePfnLockFromDpcLevel(VOID)
1034{
1035 PKSPIN_LOCK_QUEUE LockQueue;
1036
1037 LockQueue = &KeGetCurrentPrcb()->LockQueue[LockQueuePfnLock];
1038 KeReleaseQueuedSpinLockFromDpcLevel(LockQueue);
1040}
1041
1042#define MI_ASSERT_PFN_LOCK_HELD() NT_ASSERT((KeGetCurrentIrql() >= DISPATCH_LEVEL) && (MmPfnLock != 0))
1043
1045PMMPFN
1047{
1048 PMMPFN Page;
1049 extern RTL_BITMAP MiPfnBitMap;
1050
1051 /* Make sure the PFN number is valid */
1052 if (Pfn > MmHighestPhysicalPage) return NULL;
1053
1054 /* Make sure this page actually has a PFN entry */
1055 if ((MiPfnBitMap.Buffer) && !(RtlTestBit(&MiPfnBitMap, (ULONG)Pfn))) return NULL;
1056
1057 /* Get the entry */
1058 Page = &MmPfnDatabase[Pfn];
1059
1060 /* Return it */
1061 return Page;
1062};
1063
1067{
1068 //
1069 // This will return the Page Frame Number (PFN) from the MMPFN
1070 //
1071 return Pfn1 - MmPfnDatabase;
1072}
1073
1075NTAPI
1076MmGetLRUNextUserPage(PFN_NUMBER PreviousPage, BOOLEAN MoveToLast);
1077
1079NTAPI
1081
1082VOID
1083NTAPI
1085 IN BOOLEAN StatusOnly
1086);
1087
1088VOID
1089NTAPI
1091 VOID
1092);
1093
1094/* hypermap.c *****************************************************************/
1095PVOID
1096NTAPI
1099 IN PKIRQL OldIrql);
1100
1101VOID
1102NTAPI
1105 IN KIRQL OldIrql);
1106
1107PVOID
1108NTAPI
1110 IN PFN_NUMBER NumberOfPages);
1111
1112VOID
1113NTAPI
1115 IN PFN_NUMBER NumberOfPages);
1116
1117/* i386/page.c *********************************************************/
1118
1120NTAPI
1122 struct _EPROCESS* Process,
1123 PVOID Address,
1124 ULONG flProtect,
1126);
1127
1129NTAPI
1131 struct _EPROCESS* Process,
1132 PVOID Address,
1133 ULONG flProtect,
1135);
1136
1138NTAPI
1142 _In_ ULONG flProtect,
1144
1145ULONG
1146NTAPI
1148 struct _EPROCESS* Process,
1149 PVOID Address);
1150
1151VOID
1152NTAPI
1154 struct _EPROCESS* Process,
1155 PVOID Address,
1156 ULONG flProtect
1157);
1158
1159BOOLEAN
1160NTAPI
1162 struct _EPROCESS* Process,
1164);
1165
1166BOOLEAN
1167NTAPI
1169 struct _EPROCESS* Process,
1171);
1172
1173CODE_SEG("INIT")
1174VOID
1175NTAPI
1177
1178VOID
1179NTAPI
1182 PVOID Address,
1183 SWAPENTRY* SwapEntry
1184);
1185
1187NTAPI
1190 PVOID Address,
1191 SWAPENTRY SwapEntry
1192);
1193
1194VOID
1195NTAPI
1198 PVOID Address,
1199 SWAPENTRY *SwapEntry);
1200
1201BOOLEAN
1202NTAPI
1206);
1207
1209NTAPI
1211 ULONG Consumer
1212);
1213
1214VOID
1215NTAPI
1217
1218VOID
1219NTAPI
1221
1222ULONG
1223NTAPI
1225
1226BOOLEAN
1227NTAPI
1229
1230VOID
1231NTAPI
1234 SWAPENTRY SavedSwapEntry);
1235
1237NTAPI
1239
1240VOID
1241NTAPI
1245);
1246
1247VOID
1248NTAPI
1250#define MmSetCleanPage(__P, __A) MmSetDirtyBit(__P, __A, FALSE)
1251#define MmSetDirtyPage(__P, __A) MmSetDirtyBit(__P, __A, TRUE)
1252
1253VOID
1254NTAPI
1256 struct _EPROCESS *Process,
1258);
1259
1261NTAPI
1263 struct _EPROCESS *Process,
1265);
1266
1267BOOLEAN
1268NTAPI
1270 IN ULONG MinWs,
1271 IN PEPROCESS Dest,
1272 IN PULONG_PTR DirectoryTableBase
1273);
1274
1275CODE_SEG("INIT")
1277NTAPI
1280 IN PULONG_PTR DirectoryTableBase
1281);
1282
1283CODE_SEG("INIT")
1285NTAPI
1288);
1289
1291NTAPI
1292MmSetExecuteOptions(IN ULONG ExecuteOptions);
1293
1295NTAPI
1296MmGetExecuteOptions(IN PULONG ExecuteOptions);
1297
1299BOOLEAN
1305);
1306
1308BOOLEAN
1309MmDeletePhysicalMapping(
1314);
1315
1316/* arch/procsup.c ************************************************************/
1317
1318BOOLEAN
1321 _In_ PULONG_PTR DirectoryTableBase);
1322
1323/* wset.c ********************************************************************/
1324
1327 ULONG Target,
1329 PULONG NrFreedPages
1330);
1331
1332/* region.c ************************************************************/
1333
1335NTAPI
1339 PLIST_ENTRY RegionListHead,
1340 PVOID StartAddress,
1341 SIZE_T Length,
1342 ULONG NewType,
1344 PMM_ALTER_REGION_FUNC AlterFunc
1345);
1346
1347VOID
1348NTAPI
1350 PLIST_ENTRY RegionListHead,
1351 SIZE_T Length,
1352 ULONG Type,
1354);
1355
1357NTAPI
1360 PLIST_ENTRY RegionListHead,
1361 PVOID Address,
1362 PVOID* RegionBaseAddress
1363);
1364
1365/* section.c *****************************************************************/
1366
1367#define PFN_FROM_SSE(E) ((PFN_NUMBER)((E) >> PAGE_SHIFT))
1368#define IS_SWAP_FROM_SSE(E) ((E) & 0x00000001)
1369#define MM_IS_WAIT_PTE(E) \
1370 (IS_SWAP_FROM_SSE(E) && SWAPENTRY_FROM_SSE(E) == MM_WAIT_ENTRY)
1371#define MAKE_PFN_SSE(P) ((ULONG_PTR)((P) << PAGE_SHIFT))
1372#define SWAPENTRY_FROM_SSE(E) ((E) >> 1)
1373#define MAKE_SWAP_SSE(S) (((ULONG_PTR)(S) << 1) | 0x1)
1374#define DIRTY_SSE(E) ((E) | 2)
1375#define CLEAN_SSE(E) ((E) & ~2)
1376#define IS_DIRTY_SSE(E) ((E) & 2)
1377#define WRITE_SSE(E) ((E) | 4)
1378#define IS_WRITE_SSE(E) ((E) & 4)
1379#ifdef _WIN64
1380#define PAGE_FROM_SSE(E) ((E) & 0xFFFFFFF000ULL)
1381#else
1382#define PAGE_FROM_SSE(E) ((E) & 0xFFFFF000)
1383#endif
1384#define SHARE_COUNT_FROM_SSE(E) (((E) & 0x00000FFC) >> 3)
1385#define MAX_SHARE_COUNT 0x1FF
1386#define MAKE_SSE(P, C) ((ULONG_PTR)((P) | ((C) << 3)))
1387#define BUMPREF_SSE(E) (PAGE_FROM_SSE(E) | ((SHARE_COUNT_FROM_SSE(E) + 1) << 3) | ((E) & 0x7))
1388#define DECREF_SSE(E) (PAGE_FROM_SSE(E) | ((SHARE_COUNT_FROM_SSE(E) - 1) << 3) | ((E) & 0x7))
1389
1390VOID
1391NTAPI
1393 const char *file,
1394 int line);
1395
1396#define MmLockSectionSegment(x) _MmLockSectionSegment(x,__FILE__,__LINE__)
1397
1398VOID
1399NTAPI
1401 const char *file,
1402 int line);
1403
1404#define MmUnlockSectionSegment(x) _MmUnlockSectionSegment(x,__FILE__,__LINE__)
1405
1406VOID
1407NTAPI
1409 OUT PSECTION_IMAGE_INFORMATION ImageInformation
1410);
1411
1413NTAPI
1415 IN PVOID Section
1416);
1418NTAPI
1422);
1423
1425NTAPI
1427 IN PVOID Section,
1429);
1430
1432NTAPI
1435 PVOID Address,
1438);
1439
1441NTAPI
1446 SIZE_T Length,
1447 ULONG Protect,
1448 PULONG OldProtect
1449);
1450
1451CODE_SEG("INIT")
1453NTAPI
1455
1457NTAPI
1461 PVOID Address,
1463);
1464
1466NTAPI
1470 PVOID Address,
1472);
1473
1474CODE_SEG("INIT")
1476NTAPI
1478
1480NTAPI
1484 PVOID Address,
1486);
1487
1488VOID
1489NTAPI
1491
1492/* Exported from NT 6.2 onward. We keep it internal. */
1494NTAPI
1496 _In_ PVOID Section,
1501
1502BOOLEAN
1503NTAPI
1507 _In_ ULONG Length);
1508
1510NTAPI
1514 _In_ ULONG Length);
1515
1517NTAPI
1523
1525NTAPI
1530 _In_ PLARGE_INTEGER ValidDataLength);
1531
1532BOOLEAN
1533NTAPI
1537 _In_ ULONG Length);
1538
1539BOOLEAN
1540NTAPI
1546
1547BOOLEAN
1548NTAPI
1552 BOOLEAN Dirty,
1554 ULONG_PTR *InEntry);
1555
1561VOID
1562NTAPI
1563MmDereferenceSegmentWithLock(
1566
1570VOID
1571MmDereferenceSegment(PMM_SECTION_SEGMENT Segment)
1572{
1573 MmDereferenceSegmentWithLock(Segment, MM_NOIRQL);
1574}
1575
1577NTAPI
1579 _In_ PVOID Section,
1581
1582/* sptab.c *******************************************************************/
1583
1585NTAPI
1589 const char *file,
1590 int line);
1591
1593NTAPI
1596 const char *file,
1597 int line);
1598
1599#define MmSetPageEntrySectionSegment(S,O,E) _MmSetPageEntrySectionSegment(S,O,E,__FILE__,__LINE__)
1600
1601#define MmGetPageEntrySectionSegment(S,O) _MmGetPageEntrySectionSegment(S,O,__FILE__,__LINE__)
1602
1603/* sysldr.c ******************************************************************/
1604
1605CODE_SEG("INIT")
1606VOID
1607NTAPI
1609 IN PLOADER_PARAMETER_BLOCK LoaderBlock
1610);
1611
1612CODE_SEG("INIT")
1613BOOLEAN
1614NTAPI
1616 IN PLOADER_PARAMETER_BLOCK LoaderBlock
1617);
1618
1619BOOLEAN
1620NTAPI
1622
1623VOID
1624NTAPI
1626
1628NTAPI
1631 IN PUNICODE_STRING NamePrefix OPTIONAL,
1632 IN PUNICODE_STRING LoadedName OPTIONAL,
1633 IN ULONG Flags,
1634 OUT PVOID *ModuleObject,
1635 OUT PVOID *ImageBaseAddress
1636);
1637
1639NTAPI
1641 IN PVOID ImageHandle
1642);
1643
1644#ifdef CONFIG_SMP
1645BOOLEAN
1646NTAPI
1647MmVerifyImageIsOkForMpUse(
1649#endif // CONFIG_SMP
1650
1652NTAPI
1654 _In_ HANDLE ImageHandle);
1655
1657NTAPI
1659 _In_ PLDR_DATA_TABLE_ENTRY LdrEntry,
1661
1662VOID
1663NTAPI
1665 IN PLDR_DATA_TABLE_ENTRY LdrEntry);
1666
1667/* ReactOS-only, used by psmgr.c PspLookupSystemDllEntryPoint() as well */
1669NTAPI
1671 _In_ PVOID ImageBase,
1672 _In_ PCSTR ExportName,
1674 _Out_opt_ PBOOLEAN IsForwarder,
1675 _In_ NTSTATUS NotFoundStatus);
1676
1677/* Exported from NT 10.0 onward. We keep it internal. */
1678PVOID
1679NTAPI
1681 _In_ PVOID ImageBase,
1682 _In_ PCSTR ExportName);
1683
1684/* procsup.c *****************************************************************/
1685
1687NTAPI
1689 IN PVOID StackPointer
1690);
1691
1692
1694VOID
1696{
1697 ASSERT(!PsGetCurrentThread()->OwnsProcessWorkingSetExclusive);
1698 ASSERT(!PsGetCurrentThread()->OwnsProcessWorkingSetShared);
1699 ASSERT(!PsGetCurrentThread()->OwnsSystemWorkingSetExclusive);
1700 ASSERT(!PsGetCurrentThread()->OwnsSystemWorkingSetShared);
1701 ASSERT(!PsGetCurrentThread()->OwnsSessionWorkingSetExclusive);
1702 ASSERT(!PsGetCurrentThread()->OwnsSessionWorkingSetShared);
1703 KeAcquireGuardedMutex(&CONTAINING_RECORD(AddressSpace, EPROCESS, Vm)->AddressCreationLock);
1704}
1705
1707VOID
1709{
1710 KeReleaseGuardedMutex(&CONTAINING_RECORD(AddressSpace, EPROCESS, Vm)->AddressCreationLock);
1711}
1712
1716{
1717 if (AddressSpace == MmKernelAddressSpace) return NULL;
1719}
1720
1724{
1725 return &((PEPROCESS)KeGetCurrentThread()->ApcState.Process)->Vm;
1726}
1727
1731{
1732 return MmKernelAddressSpace;
1733}
1734
1735
1736/* expool.c ******************************************************************/
1737
1738VOID
1739NTAPI
1741 PVOID P,
1743 ULONG Tag);
1744
1745VOID
1746NTAPI
1748 IN PVOID P);
1749
1750
1751/* mmsup.c *****************************************************************/
1752
1754NTAPI
1756 IN SIZE_T WorkingSetMinimumInBytes,
1757 IN SIZE_T WorkingSetMaximumInBytes,
1758 IN ULONG SystemCache,
1759 IN BOOLEAN IncreaseOkay);
1760
1761
1762/* session.c *****************************************************************/
1763
1766NTAPI
1767MmAttachSession(
1768 _Inout_ PVOID SessionEntry,
1770
1772VOID
1773NTAPI
1774MmDetachSession(
1775 _Inout_ PVOID SessionEntry,
1777
1778VOID
1779NTAPI
1781 _Inout_ PVOID SessionEntry);
1782
1783PVOID
1784NTAPI
1787
1789VOID
1790NTAPI
1791MmSetSessionLocaleId(
1793
1794/* shutdown.c *****************************************************************/
1795
1796VOID
1798
1799/* virtual.c *****************************************************************/
1800
1802NTAPI
1803MmCopyVirtualMemory(IN PEPROCESS SourceProcess,
1805 IN PEPROCESS TargetProcess,
1809 OUT PSIZE_T ReturnSize);
1810
1811/* wslist.cpp ****************************************************************/
1812_Requires_exclusive_lock_held_(WorkingSet->WorkingSetMutex)
1813VOID
1814NTAPI
1816
1817#ifdef __cplusplus
1818} // extern "C"
1819
1820namespace ntoskrnl
1821{
1822using MiPfnLockGuard = const KiQueuedSpinLockGuard<LockQueuePfnLock>;
1823} // namespace ntoskrnl
1824
1825#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:177
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:684
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:1723
FORCEINLINE PMMPFN MiGetPfnEntry(IN PFN_NUMBER Pfn)
Definition: mm.h:1046
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:329
#define MM_NOIRQL
Definition: mm.h:70
_MI_PFN_USAGES
Definition: mm.h:333
@ MI_USAGE_NONPAGED_POOL_EXPANSION
Definition: mm.h:337
@ MI_USAGE_LEGACY_PAGE_DIRECTORY
Definition: mm.h:346
@ MI_USAGE_PAGE_FILE
Definition: mm.h:356
@ MI_USAGE_NOT_SET
Definition: mm.h:334
@ MI_USAGE_COW
Definition: mm.h:357
@ MI_USAGE_PEB_TEB
Definition: mm.h:342
@ MI_USAGE_PAGE_TABLE
Definition: mm.h:344
@ MI_USAGE_INIT_MEMORY
Definition: mm.h:355
@ MI_USAGE_VAD
Definition: mm.h:341
@ MI_USAGE_SYSTEM_PTE
Definition: mm.h:340
@ MI_USAGE_CONTINOUS_ALLOCATION
Definition: mm.h:348
@ MI_USAGE_PAGED_POOL
Definition: mm.h:335
@ MI_USAGE_MDL
Definition: mm.h:349
@ MI_USAGE_PFN_DATABASE
Definition: mm.h:353
@ MI_USAGE_ZERO_LOOP
Definition: mm.h:351
@ MI_USAGE_DRIVER_PAGE
Definition: mm.h:347
@ MI_USAGE_DEMAND_ZERO
Definition: mm.h:350
@ MI_USAGE_SECTION
Definition: mm.h:343
@ MI_USAGE_WSLE
Definition: mm.h:358
@ MI_USAGE_FREE_PAGE
Definition: mm.h:359
@ MI_USAGE_PAGE_DIRECTORY
Definition: mm.h:345
@ MI_USAGE_CACHE
Definition: mm.h:352
@ MI_USAGE_KERNEL_STACK_EXPANSION
Definition: mm.h:339
@ MI_USAGE_KERNEL_STACK
Definition: mm.h:338
@ MI_USAGE_NONPAGED_POOL
Definition: mm.h:336
@ MI_USAGE_BOOT_DRIVER
Definition: mm.h:354
FORCEINLINE VOID MmLockAddressSpace(PMMSUPPORT AddressSpace)
Definition: mm.h:1695
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:5056
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:682
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:1556
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:1303
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:1066
MMPFNLIST MmStandbyPageListHead
Definition: pfnlist.c:43
#define MmSetCleanPage(__P, __A)
Definition: mm.h:1250
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:4899
BOOLEAN NTAPI MmUnsharePageEntrySectionSegment(PMEMORY_AREA MemoryArea, PMM_SECTION_SEGMENT Segment, PLARGE_INTEGER Offset, BOOLEAN Dirty, BOOLEAN PageOut, ULONG_PTR *InEntry)
Definition: section.c:1087
NTSTATUS NTAPI MmQuerySectionView(PMEMORY_AREA MemoryArea, PVOID Address, PMEMORY_BASIC_INFORMATION Info, PSIZE_T ResultLength)
Definition: section.c:2131
NTSTATUS NTAPI MmProtectSectionView(PMMSUPPORT AddressSpace, PMEMORY_AREA MemoryArea, PVOID BaseAddress, SIZE_T Length, ULONG Protect, PULONG OldProtect)
Definition: section.c:2087
MMPFNLIST MmModifiedPageListHead
Definition: pfnlist.c:45
struct _MMPAGING_FILE * PMMPAGING_FILE
#define MI_PTE_FRAME_BITS
Definition: mm.h:385
_In_ PVOID _Out_opt_ BOOLEAN _Out_opt_ PPFN_NUMBER Page
Definition: mm.h:1305
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:1934
FORCEINLINE VOID UpdateTotalCommittedPages(LONG Delta)
Definition: mm.h:870
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:1708
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:4994
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:546
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:5113
SIZE_T MmtotalCommitLimitMaximum
Definition: freelist.c:36
NTSTATUS NTAPI MmExtendSection(_In_ PVOID Section, _Inout_ PLARGE_INTEGER NewSize)
Definition: section.c:5445
NTSTATUS NTAPI MmInitSectionImplementation(VOID)
Definition: section.c:2326
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:1715
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:1769
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:5036
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:4511
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:1730
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:692
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:535
NTSTATUS NTAPI MmCreatePhysicalMemorySection(VOID)
Definition: section.c:2235
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:328
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:5199
PLARGE_INTEGER BOOLEAN ForceDirty
Definition: section.c:5197
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:264
PMM_SECTION_SEGMENT Segment
Definition: mm.h:265
LIST_ENTRY RegionListHead
Definition: mm.h:266
ULONG Flags
Definition: mm.h:258
ULONG Magic
Definition: mm.h:260
BOOLEAN DeleteInProgress
Definition: mm.h:259
ULONG Type
Definition: mm.h:257
struct _MEMORY_AREA::@1942 SectionData
MMVAD VadNode
Definition: mm.h:255
Definition: mm.h:492
ULONG Signature
Definition: mm.h:495
struct _MMFREE_POOL_ENTRY * Owner
Definition: mm.h:496
PFN_COUNT Size
Definition: mm.h:494
LIST_ENTRY List
Definition: mm.h:493
PFN_NUMBER MinimumSize
Definition: mm.h:522
UNICODE_STRING PageFileName
Definition: mm.h:526
PFN_NUMBER Size
Definition: mm.h:520
PRTL_BITMAP Bitmap
Definition: mm.h:527
PFN_NUMBER CurrentUsage
Definition: mm.h:524
PFN_NUMBER FreeSpace
Definition: mm.h:523
PFILE_OBJECT FileObject
Definition: mm.h:525
PFN_NUMBER MaximumSize
Definition: mm.h:521
HANDLE FileHandle
Definition: mm.h:528
USHORT RemovalRequested
Definition: mm.h:376
USHORT CacheAttribute
Definition: mm.h:377
USHORT PageColor
Definition: mm.h:374
USHORT PrototypePte
Definition: mm.h:373
USHORT Modified
Definition: mm.h:370
USHORT ReadInProgress
Definition: mm.h:371
USHORT PageLocation
Definition: mm.h:375
USHORT Rom
Definition: mm.h:378
USHORT ParityError
Definition: mm.h:379
USHORT WriteInProgress
Definition: mm.h:372
Definition: mm.h:461
PFN_NUMBER Total
Definition: mm.h:462
MMLISTS ListName
Definition: mm.h:463
PFN_NUMBER Blink
Definition: mm.h:465
PFN_NUMBER Flink
Definition: mm.h:464
Definition: mm.h:390
PMM_RMAP_ENTRY RmapListHead
Definition: mm.h:430
MMPTE OriginalPte
Definition: mm.h:426
MMWSLE Wsle
Definition: mm.h:453
ULONG_PTR MustBeCached
Definition: mm.h:442
SINGLE_LIST_ENTRY NextStackPfn
Definition: mm.h:397
struct _MMPFN * NextLRU
Definition: mm.h:454
PFN_NUMBER Blink
Definition: mm.h:405
struct _MMPFN::@1945::@1951 e2
PMMPTE PteAddress
Definition: mm.h:402
NTSTATUS ReadStatus
Definition: mm.h:396
union _MMPFN::@1945 u3
LONG AweReferenceCount
Definition: mm.h:427
PFN_NUMBER Flink
Definition: mm.h:393
union _MMPFN::@1948 u4
union _MMPFN::@1943 u1
union _MMPFN::@1944 u2
ULONG WsIndex
Definition: mm.h:394
MMPFNENTRY e1
Definition: mm.h:413
ULONG_PTR VerifierAllocation
Definition: mm.h:439
ULONG_PTR ShareCount
Definition: mm.h:406
ULONG_PTR EntireFrame
Definition: mm.h:434
struct _MMPFN * PreviousLRU
Definition: mm.h:455
ULONG_PTR InPageError
Definition: mm.h:438
ULONG_PTR Priority
Definition: mm.h:441
PKEVENT Event
Definition: mm.h:395
USHORT ReferenceCount
Definition: mm.h:412
USHORT ShortFlags
Definition: mm.h:418
SWAPENTRY SwapEntry
Definition: mm.h:400
ULONG_PTR AweAllocation
Definition: mm.h:440
ULONG_PTR PteFrame
Definition: mm.h:437
PMM_SECTION_SEGMENT Segments
Definition: mm.h:240
PFILE_OBJECT FileObject
Definition: mm.h:232
SECTION_IMAGE_INFORMATION ImageInformation
Definition: mm.h:237
NTSTATUS(* Trim)(ULONG Target, ULONG Priority, PULONG NrFreed)
Definition: mm.h:478
ULONG PagesTarget
Definition: mm.h:477
ULONG PagesUsed
Definition: mm.h:476
PMMPTE LastPteForPagedPool
Definition: mm.h:508
SIZE_T AllocatedPagedPool
Definition: mm.h:512
PRTL_BITMAP EndOfPagedPoolBitmap
Definition: mm.h:506
PRTL_BITMAP PagedPoolAllocationMap
Definition: mm.h:505
PMMPDE NextPdeForPagedPoolExpansion
Definition: mm.h:509
PMMPTE FirstPteForPagedPool
Definition: mm.h:507
ULONG PagedPoolHint
Definition: mm.h:510
SIZE_T PagedPoolCommit
Definition: mm.h:511
Definition: mm.h:482
LIST_ENTRY RegionListEntry
Definition: mm.h:486
ULONG Type
Definition: mm.h:483
SIZE_T Length
Definition: mm.h:485
ULONG Protect
Definition: mm.h:484
Definition: mm.h:276
PVOID Address
Definition: mm.h:279
PEPROCESS Process
Definition: mm.h:278
struct _MM_RMAP_ENTRY * Next
Definition: mm.h:277
LONG64 RefCount
Definition: mm.h:202
PULONG Flags
Definition: mm.h:211
ULONG_PTR VirtualAddress
Definition: mm.h:218
struct _MM_SECTION_SEGMENT::@1941 Image
ULONG SectionCount
Definition: mm.h:209
LARGE_INTEGER RawLength
Definition: mm.h:206
ULONGLONG LastPage
Definition: mm.h:224
BOOLEAN Locked
Definition: mm.h:213
PLONG64 ReferenceCount
Definition: mm.h:208
FAST_MUTEX Lock
Definition: mm.h:205
PFILE_OBJECT FileObject
Definition: mm.h:203
ULONGLONG FileOffset
Definition: mm.h:217
ULONG SegFlags
Definition: mm.h:222
BOOLEAN WriteCopy
Definition: mm.h:212
ULONG Protection
Definition: mm.h:210
ULONG Characteristics
Definition: mm.h:219
RTL_GENERIC_TABLE PageTable
Definition: mm.h:226
LARGE_INTEGER Length
Definition: mm.h:207
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:3782
_Must_inspect_result_ _In_ WDFDEVICE _In_ BOOLEAN _In_opt_ PVOID Tag
Definition: wdfdevice.h:4071
_Must_inspect_result_ _In_ WDFDEVICE _In_ DEVICE_REGISTRY_PROPERTY _In_ _Strict_type_match_ POOL_TYPE PoolType
Definition: wdfdevice.h:3821
_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:4539
_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
_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:468
CCHAR KPROCESSOR_MODE
Definition: ketypes.h:7
* PKAPC_STATE
Definition: ketypes.h:1711
@ LockQueuePfnLock
Definition: ketypes.h:712
_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