ReactOS 0.4.16-dev-1170-ge326b06
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 SEC_PHYSICALMEMORY (0x80000000)
113
114#define MC_USER (0)
115#define MC_SYSTEM (1)
116#define MC_MAXIMUM (2)
117
118#define PAGED_POOL_MASK 1
119#define MUST_SUCCEED_POOL_MASK 2
120#define CACHE_ALIGNED_POOL_MASK 4
121#define QUOTA_POOL_MASK 8
122#define SESSION_POOL_MASK 32
123#define VERIFIER_POOL_MASK 64
124
125#define MAX_PAGING_FILES (16)
126
127// FIXME: use ALIGN_UP_BY
128#define MM_ROUND_UP(x,s) \
129 ((PVOID)(((ULONG_PTR)(x)+(s)-1) & ~((ULONG_PTR)(s)-1)))
130
131#define MM_ROUND_DOWN(x,s) \
132 ((PVOID)(((ULONG_PTR)(x)) & ~((ULONG_PTR)(s)-1)))
133
134/* PAGE_ROUND_UP and PAGE_ROUND_DOWN equivalent, with support for 64-bit-only data types */
135#define PAGE_ROUND_UP_64(x) \
136 (((x) + PAGE_SIZE - 1) & ~(PAGE_SIZE - 1))
137
138#define PAGE_ROUND_DOWN_64(x) \
139 ((x) & ~(PAGE_SIZE - 1))
140
141#define PAGE_FLAGS_VALID_FOR_SECTION \
142 (PAGE_READONLY | \
143 PAGE_READWRITE | \
144 PAGE_WRITECOPY | \
145 PAGE_EXECUTE | \
146 PAGE_EXECUTE_READ | \
147 PAGE_EXECUTE_READWRITE | \
148 PAGE_EXECUTE_WRITECOPY | \
149 PAGE_NOACCESS | \
150 PAGE_NOCACHE)
151
152#define PAGE_IS_READABLE \
153 (PAGE_READONLY | \
154 PAGE_READWRITE | \
155 PAGE_WRITECOPY | \
156 PAGE_EXECUTE_READ | \
157 PAGE_EXECUTE_READWRITE | \
158 PAGE_EXECUTE_WRITECOPY)
159
160#define PAGE_IS_WRITABLE \
161 (PAGE_READWRITE | \
162 PAGE_WRITECOPY | \
163 PAGE_EXECUTE_READWRITE | \
164 PAGE_EXECUTE_WRITECOPY)
165
166#define PAGE_IS_EXECUTABLE \
167 (PAGE_EXECUTE | \
168 PAGE_EXECUTE_READ | \
169 PAGE_EXECUTE_READWRITE | \
170 PAGE_EXECUTE_WRITECOPY)
171
172#define PAGE_IS_WRITECOPY \
173 (PAGE_WRITECOPY | \
174 PAGE_EXECUTE_WRITECOPY)
175
176//
177// Wait entry for marking pages that are being serviced
178//
179#ifdef _M_IX86
180#define MM_WAIT_ENTRY 0x7ffffc00
181#elif defined(_M_AMD64)
182#define MM_WAIT_ENTRY 0x7FFFFFFFFFFFFC00ULL
183#else
184#error Unsupported architecture!
185#endif
186
187#ifdef _M_AMD64
188#define InterlockedCompareExchangePte(PointerPte, Exchange, Comperand) \
189 InterlockedCompareExchange64((PLONG64)(PointerPte), Exchange, Comperand)
190
191#define InterlockedExchangePte(PointerPte, Value) \
192 InterlockedExchange64((PLONG64)(PointerPte), Value)
193#else
194#define InterlockedCompareExchangePte(PointerPte, Exchange, Comperand) \
195 InterlockedCompareExchange((PLONG)(PointerPte), Exchange, Comperand)
196
197#define InterlockedExchangePte(PointerPte, Value) \
198 InterlockedExchange((PLONG)(PointerPte), Value)
199#endif
200
202{
205
206 FAST_MUTEX Lock; /* lock which protects the page directory */
207 LARGE_INTEGER RawLength; /* length of the segment which is part of the mapped file */
208 LARGE_INTEGER Length; /* absolute length of the segment */
215
216 struct
217 {
218 ULONGLONG FileOffset; /* start offset into the file for image sections */
219 ULONG_PTR VirtualAddress; /* start offset into the address range for image sections */
222
224
226
229
231{
237
243
244#define MM_PHYSICALMEMORY_SEGMENT (0x1)
245#define MM_DATAFILE_SEGMENT (0x2)
246#define MM_SEGMENT_INDELETE (0x4)
247#define MM_SEGMENT_INCREATE (0x8)
248#define MM_IMAGE_SECTION_FLUSH_DELETE (0x10)
249
250
251#define MA_GetStartingAddress(_MemoryArea) ((_MemoryArea)->VadNode.StartingVpn << PAGE_SHIFT)
252#define MA_GetEndingAddress(_MemoryArea) (((_MemoryArea)->VadNode.EndingVpn + 1) << PAGE_SHIFT)
253
254typedef struct _MEMORY_AREA
255{
257
262
263 struct
264 {
270
271#define MI_SET_MEMORY_AREA_VAD(Vad) do { (Vad)->u.VadFlags.Spare |= 1; } while (0)
272#define MI_IS_MEMORY_AREA_VAD(Vad) (((Vad)->u.VadFlags.Spare & 1) != 0)
273#define MI_SET_ROSMM_VAD(Vad) do { (Vad)->u.VadFlags.Spare |= 2; } while (0)
274#define MI_IS_ROSMM_VAD(Vad) (((Vad)->u.VadFlags.Spare & 2) != 0)
275
276typedef struct _MM_RMAP_ENTRY
277{
281#if DBG
282 PVOID Caller;
283#endif
284}
286
287#if MI_TRACE_PFNS
290#define MI_SET_USAGE(x) MI_PFN_CURRENT_USAGE = x
291#define MI_SET_PROCESS2(x) memcpy(MI_PFN_CURRENT_PROCESS_NAME, x, min(sizeof(x), sizeof(MI_PFN_CURRENT_PROCESS_NAME)))
293void
295{
296 if (!Process)
297 MI_SET_PROCESS2("Kernel");
298 else if (Process == (PEPROCESS)1)
299 MI_SET_PROCESS2("Hydra");
300 else
301 MI_SET_PROCESS2(Process->ImageFileName);
302}
303
305void
306MI_SET_PROCESS_USTR(PUNICODE_STRING ustr)
307{
308 PWSTR pos, strEnd;
309 ULONG i;
310
311 if (!ustr->Buffer || ustr->Length == 0)
312 {
314 return;
315 }
316
317 pos = strEnd = &ustr->Buffer[ustr->Length / sizeof(WCHAR)];
318 while ((*pos != L'\\') && (pos > ustr->Buffer))
319 pos--;
320
321 if (*pos == L'\\')
322 pos++;
323
324 for (i = 0; i < sizeof(MI_PFN_CURRENT_PROCESS_NAME) && pos <= strEnd; i++, pos++)
326}
327#else
328#define MI_SET_USAGE(x)
329#define MI_SET_PROCESS(x)
330#define MI_SET_PROCESS2(x)
331#endif
332
333typedef enum _MI_PFN_USAGES
334{
362
363//
364// These two mappings are actually used by Windows itself, based on the ASSERTS
365//
366#define StartOfAllocation ReadInProgress
367#define EndOfAllocation WriteInProgress
368
369typedef struct _MMPFNENTRY
370{
372 USHORT ReadInProgress:1; // StartOfAllocation
373 USHORT WriteInProgress:1; // EndOfAllocation
382
383#ifdef _WIN64
384#define MI_PTE_FRAME_BITS 57
385#else
386#define MI_PTE_FRAME_BITS 25
387#endif
388
389// Mm internal
390typedef struct _MMPFN
391{
392 union
393 {
399
400 // HACK for ROSPFN
402 } u1;
404 union
405 {
408 } u2;
409 union
410 {
411 struct
412 {
415 };
416 struct
417 {
420 } e2;
421 } u3;
422#ifdef _WIN64
423 ULONG UsedPageTableEntries;
424#endif
425 union
426 {
429
430 // HACK for ROSPFN
432 };
433 union
434 {
436 struct
437 {
444 };
445 } u4;
446#if MI_TRACE_PFNS
447 MI_PFN_USAGES PfnUsage;
448 CHAR ProcessName[16];
449#define MI_SET_PFN_PROCESS_NAME(pfn, x) memcpy(pfn->ProcessName, x, min(sizeof(x), sizeof(pfn->ProcessName)))
450 PVOID CallSite;
451#endif
452
453 // HACK until WS lists are supported
458
459extern PMMPFN MmPfnDatabase;
460
461typedef struct _MMPFNLIST
462{
468
474
476{
481
482typedef struct _MM_REGION
483{
489
490// Mm internal
491/* Entry describing free pool memory */
492typedef struct _MMFREE_POOL_ENTRY
493{
499
500/* Signature of a freed block */
501#define MM_FREE_POOL_SIGNATURE 'ARM3'
502
503/* Paged pool information */
505{
515
517
518/* Page file information */
519typedef struct _MMPAGING_FILE
520{
530}
532
534
535typedef VOID
540 ULONG OldType,
541 ULONG OldProtect,
542 ULONG NewType,
544);
545
546typedef VOID
552 SWAPENTRY SwapEntry,
553 BOOLEAN Dirty
554);
555
556//
557// Mm copy support for Kd
558//
560NTAPI
564 IN ULONG Size,
566);
567
568//
569// Determines if a given address is a session address
570//
572NTAPI
575);
576
577ULONG
578NTAPI
581);
582
583ULONG
584NTAPI
587);
588
589/* marea.c *******************************************************************/
590
592NTAPI
595 ULONG Type,
598 ULONG Protection,
600 ULONG AllocationFlags,
601 ULONG AllocationGranularity
602);
603
605NTAPI
609);
610
612NTAPI
617 PVOID FreePageContext
618);
619
620VOID
621NTAPI
624 PMMVAD Vad);
625
627NTAPI
632);
633
635NTAPI
640
641PVOID
642NTAPI
646 ULONG_PTR Granularity,
647 BOOLEAN TopDown
648);
649
650/* npool.c *******************************************************************/
651
652CODE_SEG("INIT")
653VOID
654NTAPI
656
657PVOID
658NTAPI
661 IN SIZE_T SizeInBytes
662);
663
665NTAPI
668);
669
670ULONG
671NTAPI
673 IN PVOID StartingAddress
674);
675
676/* pool.c *******************************************************************/
677
680NTAPI
681MmRaisePoolQuota(
685);
686
688VOID
689NTAPI
690MmReturnPoolQuota(
693);
694
695/* mdl.c *********************************************************************/
696
697VOID
698NTAPI
700 PMDL Mdl,
701 PPFN_NUMBER Pages
702);
703
704/* mminit.c ******************************************************************/
705
706CODE_SEG("INIT")
708NTAPI
709MmInitSystem(IN ULONG Phase,
710 IN PLOADER_PARAMETER_BLOCK LoaderBlock);
711
712
713/* pagefile.c ****************************************************************/
714
716NTAPI
718
719VOID
720NTAPI
722
723CODE_SEG("INIT")
724VOID
725NTAPI
727
729NTAPI
731
733NTAPI
735 SWAPENTRY SwapEntry,
737);
738
740NTAPI
742 SWAPENTRY SwapEntry,
744);
745
746VOID
747NTAPI
749
751NTAPI
754 _In_ ULONG PageFileIndex,
755 _In_ ULONG_PTR PageFileOffset);
756
757/* process.c ****************************************************************/
758
760NTAPI
764 IN PVOID Section OPTIONAL,
767);
768
770NTAPI
773 IN PINITIAL_PEB InitialPeb,
774 OUT PPEB *BasePeb
775);
776
778NTAPI
782 IN PINITIAL_TEB InitialTeb,
783 OUT PTEB* BaseTeb
784);
785
786VOID
787NTAPI
790 PTEB Teb
791);
792
793VOID
794NTAPI
796
797VOID
798NTAPI
800
801ULONG
802NTAPI
804
806NTAPI
809 IN UCHAR MemoryPriority
810);
811
812/* special.c *****************************************************************/
813
814VOID
815NTAPI
817
819NTAPI
822 IN ULONG Tag);
823
825NTAPI
827 IN PVOID P);
828
830NTAPI
832 IN PVOID P);
833
834PVOID
835NTAPI
838 IN ULONG Tag,
840 IN ULONG SpecialType);
841
842VOID
843NTAPI
845 IN PVOID P);
846
847/* mm.c **********************************************************************/
848
850NTAPI
852 IN ULONG FaultCode,
855 IN PVOID TrapInformation
856);
857
858/* process.c *****************************************************************/
859
860PVOID
861NTAPI
863
864VOID
865NTAPI
867 BOOLEAN GuiStack);
868
869/* balance.c / pagefile.c******************************************************/
870
872{
873 /*
874 * Add up all the used "Committed" memory + pagefile.
875 * Not sure this is right. 8^\
876 * MmTotalCommittedPages should be adjusted consistently with
877 * other counters at different places.
878 *
879 MmTotalCommittedPages = MiMemoryConsumers[MC_SYSTEM].PagesUsed +
880 MiMemoryConsumers[MC_USER].PagesUsed +
881 MiUsedSwapPages;
882 */
883
884 /* Update Commitment */
886
887 /* Update Peak = max(Peak, Total) in a lockless way */
888 SIZE_T PeakCommitment = MmPeakCommitment;
889 while (TotalCommittedPages > PeakCommitment &&
890 InterlockedCompareExchangeSizeT(&MmPeakCommitment, TotalCommittedPages, PeakCommitment) != PeakCommitment)
891 {
892 PeakCommitment = MmPeakCommitment;
893 }
894}
895
896/* balance.c *****************************************************************/
897
898CODE_SEG("INIT")
899VOID
900NTAPI
902 ULONG Consumer,
903 NTSTATUS (*Trim)(ULONG Target, ULONG Priority, PULONG NrFreed)
904);
905
906CODE_SEG("INIT")
907VOID
908NTAPI
910 ULONG NrAvailablePages,
911 ULONG NrSystemPages
912);
913
915NTAPI
917 ULONG Consumer,
919);
920
922NTAPI
924 ULONG Consumer,
925 BOOLEAN MyWait,
926 PPFN_NUMBER AllocatedPage
927);
928
929CODE_SEG("INIT")
930VOID
931NTAPI
933
934VOID
935NTAPI
937
938/* rmap.c **************************************************************/
939#define RMAP_SEGMENT_MASK ~((ULONG_PTR)0xff)
940#define RMAP_IS_SEGMENT(x) (((ULONG_PTR)(x) & RMAP_SEGMENT_MASK) == RMAP_SEGMENT_MASK)
941
942VOID
943NTAPI
946 struct _MM_RMAP_ENTRY* ListHead
947);
948
949struct _MM_RMAP_ENTRY*
950NTAPI
952
953VOID
954NTAPI
957 struct _EPROCESS *Process,
959);
960
961VOID
962NTAPI
966 VOID (*DeleteMapping)(PVOID Context, struct _EPROCESS *Process, PVOID Address)
967);
968
969VOID
970NTAPI
973 struct _EPROCESS *Process,
975);
976
977CODE_SEG("INIT")
978VOID
979NTAPI
981
983NTAPI
985
987NTAPI
990
991/* freelist.c **********************************************************/
998KIRQL
999MiAcquirePfnLock(VOID)
1000{
1002}
1003
1008VOID
1009MiReleasePfnLock(
1011{
1013}
1014
1019VOID
1020MiAcquirePfnLockAtDpcLevel(VOID)
1021{
1022 PKSPIN_LOCK_QUEUE LockQueue;
1023
1025 LockQueue = &KeGetCurrentPrcb()->LockQueue[LockQueuePfnLock];
1026 KeAcquireQueuedSpinLockAtDpcLevel(LockQueue);
1027}
1028
1033VOID
1034MiReleasePfnLockFromDpcLevel(VOID)
1035{
1036 PKSPIN_LOCK_QUEUE LockQueue;
1037
1038 LockQueue = &KeGetCurrentPrcb()->LockQueue[LockQueuePfnLock];
1039 KeReleaseQueuedSpinLockFromDpcLevel(LockQueue);
1041}
1042
1043#define MI_ASSERT_PFN_LOCK_HELD() NT_ASSERT((KeGetCurrentIrql() >= DISPATCH_LEVEL) && (MmPfnLock != 0))
1044
1046PMMPFN
1048{
1049 PMMPFN Page;
1050 extern RTL_BITMAP MiPfnBitMap;
1051
1052 /* Make sure the PFN number is valid */
1053 if (Pfn > MmHighestPhysicalPage) return NULL;
1054
1055 /* Make sure this page actually has a PFN entry */
1056 if ((MiPfnBitMap.Buffer) && !(RtlTestBit(&MiPfnBitMap, (ULONG)Pfn))) return NULL;
1057
1058 /* Get the entry */
1059 Page = &MmPfnDatabase[Pfn];
1060
1061 /* Return it */
1062 return Page;
1063};
1064
1068{
1069 //
1070 // This will return the Page Frame Number (PFN) from the MMPFN
1071 //
1072 return Pfn1 - MmPfnDatabase;
1073}
1074
1076NTAPI
1077MmGetLRUNextUserPage(PFN_NUMBER PreviousPage, BOOLEAN MoveToLast);
1078
1080NTAPI
1082
1083VOID
1084NTAPI
1086 IN BOOLEAN StatusOnly
1087);
1088
1089VOID
1090NTAPI
1092 VOID
1093);
1094
1095/* hypermap.c *****************************************************************/
1096PVOID
1097NTAPI
1100 IN PKIRQL OldIrql);
1101
1102VOID
1103NTAPI
1106 IN KIRQL OldIrql);
1107
1108PVOID
1109NTAPI
1111 IN PFN_NUMBER NumberOfPages);
1112
1113VOID
1114NTAPI
1116 IN PFN_NUMBER NumberOfPages);
1117
1118/* i386/page.c *********************************************************/
1119
1121NTAPI
1123 struct _EPROCESS* Process,
1124 PVOID Address,
1125 ULONG flProtect,
1127);
1128
1130NTAPI
1132 struct _EPROCESS* Process,
1133 PVOID Address,
1134 ULONG flProtect,
1136);
1137
1139NTAPI
1143 _In_ ULONG flProtect,
1145
1146ULONG
1147NTAPI
1149 struct _EPROCESS* Process,
1150 PVOID Address);
1151
1152VOID
1153NTAPI
1155 struct _EPROCESS* Process,
1156 PVOID Address,
1157 ULONG flProtect
1158);
1159
1160BOOLEAN
1161NTAPI
1163 struct _EPROCESS* Process,
1165);
1166
1167BOOLEAN
1168NTAPI
1170 struct _EPROCESS* Process,
1172);
1173
1174CODE_SEG("INIT")
1175VOID
1176NTAPI
1178
1179VOID
1180NTAPI
1183 PVOID Address,
1184 SWAPENTRY* SwapEntry
1185);
1186
1188NTAPI
1191 PVOID Address,
1192 SWAPENTRY SwapEntry
1193);
1194
1195VOID
1196NTAPI
1199 PVOID Address,
1200 SWAPENTRY *SwapEntry);
1201
1202BOOLEAN
1203NTAPI
1207);
1208
1210NTAPI
1212 ULONG Consumer
1213);
1214
1215VOID
1216NTAPI
1218
1219VOID
1220NTAPI
1222
1223ULONG
1224NTAPI
1226
1227BOOLEAN
1228NTAPI
1230
1231VOID
1232NTAPI
1235 SWAPENTRY SavedSwapEntry);
1236
1238NTAPI
1240
1241VOID
1242NTAPI
1246);
1247
1248VOID
1249NTAPI
1251#define MmSetCleanPage(__P, __A) MmSetDirtyBit(__P, __A, FALSE)
1252#define MmSetDirtyPage(__P, __A) MmSetDirtyBit(__P, __A, TRUE)
1253
1254VOID
1255NTAPI
1257 struct _EPROCESS *Process,
1259);
1260
1262NTAPI
1264 struct _EPROCESS *Process,
1266);
1267
1268BOOLEAN
1269NTAPI
1271 IN ULONG MinWs,
1272 IN PEPROCESS Dest,
1273 IN PULONG_PTR DirectoryTableBase
1274);
1275
1276CODE_SEG("INIT")
1278NTAPI
1281 IN PULONG_PTR DirectoryTableBase
1282);
1283
1284CODE_SEG("INIT")
1286NTAPI
1289);
1290
1292NTAPI
1293MmSetExecuteOptions(IN ULONG ExecuteOptions);
1294
1296NTAPI
1297MmGetExecuteOptions(IN PULONG ExecuteOptions);
1298
1300BOOLEAN
1306);
1307
1309BOOLEAN
1310MmDeletePhysicalMapping(
1315);
1316
1317/* arch/procsup.c ************************************************************/
1318
1319BOOLEAN
1322 _In_ PULONG_PTR DirectoryTableBase);
1323
1324/* wset.c ********************************************************************/
1325
1328 ULONG Target,
1330 PULONG NrFreedPages
1331);
1332
1333/* region.c ************************************************************/
1334
1336NTAPI
1340 PLIST_ENTRY RegionListHead,
1341 PVOID StartAddress,
1342 SIZE_T Length,
1343 ULONG NewType,
1345 PMM_ALTER_REGION_FUNC AlterFunc
1346);
1347
1348VOID
1349NTAPI
1351 PLIST_ENTRY RegionListHead,
1352 SIZE_T Length,
1353 ULONG Type,
1355);
1356
1358NTAPI
1361 PLIST_ENTRY RegionListHead,
1362 PVOID Address,
1363 PVOID* RegionBaseAddress
1364);
1365
1366/* section.c *****************************************************************/
1367
1368#define PFN_FROM_SSE(E) ((PFN_NUMBER)((E) >> PAGE_SHIFT))
1369#define IS_SWAP_FROM_SSE(E) ((E) & 0x00000001)
1370#define MM_IS_WAIT_PTE(E) \
1371 (IS_SWAP_FROM_SSE(E) && SWAPENTRY_FROM_SSE(E) == MM_WAIT_ENTRY)
1372#define MAKE_PFN_SSE(P) ((ULONG_PTR)((P) << PAGE_SHIFT))
1373#define SWAPENTRY_FROM_SSE(E) ((E) >> 1)
1374#define MAKE_SWAP_SSE(S) (((ULONG_PTR)(S) << 1) | 0x1)
1375#define DIRTY_SSE(E) ((E) | 2)
1376#define CLEAN_SSE(E) ((E) & ~2)
1377#define IS_DIRTY_SSE(E) ((E) & 2)
1378#define WRITE_SSE(E) ((E) | 4)
1379#define IS_WRITE_SSE(E) ((E) & 4)
1380#ifdef _WIN64
1381#define PAGE_FROM_SSE(E) ((E) & 0xFFFFFFF000ULL)
1382#else
1383#define PAGE_FROM_SSE(E) ((E) & 0xFFFFF000)
1384#endif
1385#define SHARE_COUNT_FROM_SSE(E) (((E) & 0x00000FFC) >> 3)
1386#define MAX_SHARE_COUNT 0x1FF
1387#define MAKE_SSE(P, C) ((ULONG_PTR)((P) | ((C) << 3)))
1388#define BUMPREF_SSE(E) (PAGE_FROM_SSE(E) | ((SHARE_COUNT_FROM_SSE(E) + 1) << 3) | ((E) & 0x7))
1389#define DECREF_SSE(E) (PAGE_FROM_SSE(E) | ((SHARE_COUNT_FROM_SSE(E) - 1) << 3) | ((E) & 0x7))
1390
1391VOID
1392NTAPI
1394 const char *file,
1395 int line);
1396
1397#define MmLockSectionSegment(x) _MmLockSectionSegment(x,__FILE__,__LINE__)
1398
1399VOID
1400NTAPI
1402 const char *file,
1403 int line);
1404
1405#define MmUnlockSectionSegment(x) _MmUnlockSectionSegment(x,__FILE__,__LINE__)
1406
1407VOID
1408NTAPI
1410 OUT PSECTION_IMAGE_INFORMATION ImageInformation
1411);
1412
1414NTAPI
1416 IN PVOID Section
1417);
1419NTAPI
1423);
1424
1426NTAPI
1428 IN PVOID Section,
1430);
1431
1433NTAPI
1436 PVOID Address,
1439);
1440
1442NTAPI
1447 SIZE_T Length,
1448 ULONG Protect,
1449 PULONG OldProtect
1450);
1451
1452CODE_SEG("INIT")
1454NTAPI
1456
1458NTAPI
1462 PVOID Address,
1464);
1465
1467NTAPI
1471 PVOID Address,
1473);
1474
1475CODE_SEG("INIT")
1477NTAPI
1479
1481NTAPI
1485 PVOID Address,
1487);
1488
1489VOID
1490NTAPI
1492
1493/* Exported from NT 6.2 onward. We keep it internal. */
1495NTAPI
1497 _In_ PVOID Section,
1502
1503BOOLEAN
1504NTAPI
1508 _In_ ULONG Length);
1509
1511NTAPI
1515 _In_ ULONG Length);
1516
1518NTAPI
1524
1526NTAPI
1531 _In_ PLARGE_INTEGER ValidDataLength);
1532
1533BOOLEAN
1534NTAPI
1538 _In_ ULONG Length);
1539
1540BOOLEAN
1541NTAPI
1547
1548BOOLEAN
1549NTAPI
1553 BOOLEAN Dirty,
1555 ULONG_PTR *InEntry);
1556
1562VOID
1563NTAPI
1564MmDereferenceSegmentWithLock(
1567
1571VOID
1572MmDereferenceSegment(PMM_SECTION_SEGMENT Segment)
1573{
1574 MmDereferenceSegmentWithLock(Segment, MM_NOIRQL);
1575}
1576
1578NTAPI
1580 _In_ PVOID Section,
1582
1583/* sptab.c *******************************************************************/
1584
1586NTAPI
1590 const char *file,
1591 int line);
1592
1594NTAPI
1597 const char *file,
1598 int line);
1599
1600#define MmSetPageEntrySectionSegment(S,O,E) _MmSetPageEntrySectionSegment(S,O,E,__FILE__,__LINE__)
1601
1602#define MmGetPageEntrySectionSegment(S,O) _MmGetPageEntrySectionSegment(S,O,__FILE__,__LINE__)
1603
1604/* sysldr.c ******************************************************************/
1605
1606CODE_SEG("INIT")
1607VOID
1608NTAPI
1610 IN PLOADER_PARAMETER_BLOCK LoaderBlock
1611);
1612
1613CODE_SEG("INIT")
1614BOOLEAN
1615NTAPI
1617 IN PLOADER_PARAMETER_BLOCK LoaderBlock
1618);
1619
1620BOOLEAN
1621NTAPI
1623
1624VOID
1625NTAPI
1627
1629NTAPI
1632 IN PUNICODE_STRING NamePrefix OPTIONAL,
1633 IN PUNICODE_STRING LoadedName OPTIONAL,
1634 IN ULONG Flags,
1635 OUT PVOID *ModuleObject,
1636 OUT PVOID *ImageBaseAddress
1637);
1638
1640NTAPI
1642 IN PVOID ImageHandle
1643);
1644
1645#ifdef CONFIG_SMP
1646BOOLEAN
1647NTAPI
1648MmVerifyImageIsOkForMpUse(
1650#endif // CONFIG_SMP
1651
1653NTAPI
1655 _In_ HANDLE ImageHandle);
1656
1658NTAPI
1660 _In_ PLDR_DATA_TABLE_ENTRY LdrEntry,
1662
1663VOID
1664NTAPI
1666 IN PLDR_DATA_TABLE_ENTRY LdrEntry);
1667
1668/* ReactOS-only, used by psmgr.c PspLookupSystemDllEntryPoint() as well */
1670NTAPI
1672 _In_ PVOID ImageBase,
1673 _In_ PCSTR ExportName,
1675 _Out_opt_ PBOOLEAN IsForwarder,
1676 _In_ NTSTATUS NotFoundStatus);
1677
1678/* Exported from NT 10.0 onward. We keep it internal. */
1679PVOID
1680NTAPI
1682 _In_ PVOID ImageBase,
1683 _In_ PCSTR ExportName);
1684
1685/* procsup.c *****************************************************************/
1686
1688NTAPI
1690 IN PVOID StackPointer
1691);
1692
1693
1695VOID
1697{
1698 ASSERT(!PsGetCurrentThread()->OwnsProcessWorkingSetExclusive);
1699 ASSERT(!PsGetCurrentThread()->OwnsProcessWorkingSetShared);
1700 ASSERT(!PsGetCurrentThread()->OwnsSystemWorkingSetExclusive);
1701 ASSERT(!PsGetCurrentThread()->OwnsSystemWorkingSetShared);
1702 ASSERT(!PsGetCurrentThread()->OwnsSessionWorkingSetExclusive);
1703 ASSERT(!PsGetCurrentThread()->OwnsSessionWorkingSetShared);
1704 KeAcquireGuardedMutex(&CONTAINING_RECORD(AddressSpace, EPROCESS, Vm)->AddressCreationLock);
1705}
1706
1708VOID
1710{
1711 KeReleaseGuardedMutex(&CONTAINING_RECORD(AddressSpace, EPROCESS, Vm)->AddressCreationLock);
1712}
1713
1717{
1718 if (AddressSpace == MmKernelAddressSpace) return NULL;
1720}
1721
1725{
1726 return &((PEPROCESS)KeGetCurrentThread()->ApcState.Process)->Vm;
1727}
1728
1732{
1733 return MmKernelAddressSpace;
1734}
1735
1736
1737/* expool.c ******************************************************************/
1738
1739VOID
1740NTAPI
1742 PVOID P,
1744 ULONG Tag);
1745
1746VOID
1747NTAPI
1749 IN PVOID P);
1750
1751
1752/* mmsup.c *****************************************************************/
1753
1755NTAPI
1757 IN SIZE_T WorkingSetMinimumInBytes,
1758 IN SIZE_T WorkingSetMaximumInBytes,
1759 IN ULONG SystemCache,
1760 IN BOOLEAN IncreaseOkay);
1761
1762
1763/* session.c *****************************************************************/
1764
1767NTAPI
1768MmAttachSession(
1769 _Inout_ PVOID SessionEntry,
1771
1773VOID
1774NTAPI
1775MmDetachSession(
1776 _Inout_ PVOID SessionEntry,
1778
1779VOID
1780NTAPI
1782 _Inout_ PVOID SessionEntry);
1783
1784PVOID
1785NTAPI
1788
1790VOID
1791NTAPI
1792MmSetSessionLocaleId(
1794
1795/* shutdown.c *****************************************************************/
1796
1797VOID
1799
1800/* virtual.c *****************************************************************/
1801
1803NTAPI
1804MmCopyVirtualMemory(IN PEPROCESS SourceProcess,
1806 IN PEPROCESS TargetProcess,
1810 OUT PSIZE_T ReturnSize);
1811
1812/* wslist.cpp ****************************************************************/
1813_Requires_exclusive_lock_held_(WorkingSet->WorkingSetMutex)
1814VOID
1815NTAPI
1817
1818#ifdef __cplusplus
1819} // extern "C"
1820
1821namespace ntoskrnl
1822{
1823using MiPfnLockGuard = const KiQueuedSpinLockGuard<LockQueuePfnLock>;
1824} // namespace ntoskrnl
1825
1826#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
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:1182
_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:685
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:1724
FORCEINLINE PMMPFN MiGetPfnEntry(IN PFN_NUMBER Pfn)
Definition: mm.h:1047
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:330
#define MM_NOIRQL
Definition: mm.h:70
_MI_PFN_USAGES
Definition: mm.h:334
@ MI_USAGE_NONPAGED_POOL_EXPANSION
Definition: mm.h:338
@ MI_USAGE_LEGACY_PAGE_DIRECTORY
Definition: mm.h:347
@ MI_USAGE_PAGE_FILE
Definition: mm.h:357
@ MI_USAGE_NOT_SET
Definition: mm.h:335
@ MI_USAGE_COW
Definition: mm.h:358
@ MI_USAGE_PEB_TEB
Definition: mm.h:343
@ MI_USAGE_PAGE_TABLE
Definition: mm.h:345
@ MI_USAGE_INIT_MEMORY
Definition: mm.h:356
@ MI_USAGE_VAD
Definition: mm.h:342
@ MI_USAGE_SYSTEM_PTE
Definition: mm.h:341
@ MI_USAGE_CONTINOUS_ALLOCATION
Definition: mm.h:349
@ MI_USAGE_PAGED_POOL
Definition: mm.h:336
@ MI_USAGE_MDL
Definition: mm.h:350
@ MI_USAGE_PFN_DATABASE
Definition: mm.h:354
@ MI_USAGE_ZERO_LOOP
Definition: mm.h:352
@ MI_USAGE_DRIVER_PAGE
Definition: mm.h:348
@ MI_USAGE_DEMAND_ZERO
Definition: mm.h:351
@ MI_USAGE_SECTION
Definition: mm.h:344
@ MI_USAGE_WSLE
Definition: mm.h:359
@ MI_USAGE_FREE_PAGE
Definition: mm.h:360
@ MI_USAGE_PAGE_DIRECTORY
Definition: mm.h:346
@ MI_USAGE_CACHE
Definition: mm.h:353
@ MI_USAGE_KERNEL_STACK_EXPANSION
Definition: mm.h:340
@ MI_USAGE_KERNEL_STACK
Definition: mm.h:339
@ MI_USAGE_NONPAGED_POOL
Definition: mm.h:337
@ MI_USAGE_BOOT_DRIVER
Definition: mm.h:355
FORCEINLINE VOID MmLockAddressSpace(PMMSUPPORT AddressSpace)
Definition: mm.h:1696
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:5001
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:683
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:1304
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:1067
MMPFNLIST MmStandbyPageListHead
Definition: pfnlist.c:43
#define MmSetCleanPage(__P, __A)
Definition: mm.h:1251
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:4844
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:386
_In_ PVOID _Out_opt_ BOOLEAN _Out_opt_ PPFN_NUMBER Page
Definition: mm.h:1306
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:871
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:1709
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:4939
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:547
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:5058
SIZE_T MmtotalCommitLimitMaximum
Definition: freelist.c:36
NTSTATUS NTAPI MmExtendSection(_In_ PVOID Section, _Inout_ PLARGE_INTEGER NewSize)
Definition: section.c:5390
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:1716
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:1770
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:116
NTSTATUS NTAPI MmMakeDataSectionResident(_In_ PSECTION_OBJECT_POINTERS SectionObjectPointer, _In_ LONGLONG Offset, _In_ ULONG Length, _In_ PLARGE_INTEGER ValidDataLength)
Definition: section.c:4981
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:4472
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:125
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:1731
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:693
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:536
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:329
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
#define L(x)
Definition: ntvdm.h:50
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:5144
PLARGE_INTEGER BOOLEAN ForceDirty
Definition: section.c:5142
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:265
PMM_SECTION_SEGMENT Segment
Definition: mm.h:266
LIST_ENTRY RegionListHead
Definition: mm.h:267
struct _MEMORY_AREA::@1841 SectionData
ULONG Flags
Definition: mm.h:259
ULONG Magic
Definition: mm.h:261
BOOLEAN DeleteInProgress
Definition: mm.h:260
ULONG Type
Definition: mm.h:258
MMVAD VadNode
Definition: mm.h:256
Definition: mm.h:493
ULONG Signature
Definition: mm.h:496
struct _MMFREE_POOL_ENTRY * Owner
Definition: mm.h:497
PFN_COUNT Size
Definition: mm.h:495
LIST_ENTRY List
Definition: mm.h:494
PFN_NUMBER MinimumSize
Definition: mm.h:523
UNICODE_STRING PageFileName
Definition: mm.h:527
PFN_NUMBER Size
Definition: mm.h:521
PRTL_BITMAP Bitmap
Definition: mm.h:528
PFN_NUMBER CurrentUsage
Definition: mm.h:525
PFN_NUMBER FreeSpace
Definition: mm.h:524
PFILE_OBJECT FileObject
Definition: mm.h:526
PFN_NUMBER MaximumSize
Definition: mm.h:522
HANDLE FileHandle
Definition: mm.h:529
USHORT RemovalRequested
Definition: mm.h:377
USHORT CacheAttribute
Definition: mm.h:378
USHORT PageColor
Definition: mm.h:375
USHORT PrototypePte
Definition: mm.h:374
USHORT Modified
Definition: mm.h:371
USHORT ReadInProgress
Definition: mm.h:372
USHORT PageLocation
Definition: mm.h:376
USHORT Rom
Definition: mm.h:379
USHORT ParityError
Definition: mm.h:380
USHORT WriteInProgress
Definition: mm.h:373
Definition: mm.h:462
PFN_NUMBER Total
Definition: mm.h:463
MMLISTS ListName
Definition: mm.h:464
PFN_NUMBER Blink
Definition: mm.h:466
PFN_NUMBER Flink
Definition: mm.h:465
Definition: mm.h:391
PMM_RMAP_ENTRY RmapListHead
Definition: mm.h:431
union _MMPFN::@1842 u1
MMPTE OriginalPte
Definition: mm.h:427
union _MMPFN::@1847 u4
MMWSLE Wsle
Definition: mm.h:454
ULONG_PTR MustBeCached
Definition: mm.h:443
SINGLE_LIST_ENTRY NextStackPfn
Definition: mm.h:398
struct _MMPFN * NextLRU
Definition: mm.h:455
PFN_NUMBER Blink
Definition: mm.h:406
PMMPTE PteAddress
Definition: mm.h:403
struct _MMPFN::@1844::@1850 e2
NTSTATUS ReadStatus
Definition: mm.h:397
LONG AweReferenceCount
Definition: mm.h:428
PFN_NUMBER Flink
Definition: mm.h:394
ULONG WsIndex
Definition: mm.h:395
MMPFNENTRY e1
Definition: mm.h:414
ULONG_PTR VerifierAllocation
Definition: mm.h:440
ULONG_PTR ShareCount
Definition: mm.h:407
ULONG_PTR EntireFrame
Definition: mm.h:435
union _MMPFN::@1844 u3
union _MMPFN::@1843 u2
struct _MMPFN * PreviousLRU
Definition: mm.h:456
ULONG_PTR InPageError
Definition: mm.h:439
ULONG_PTR Priority
Definition: mm.h:442
PKEVENT Event
Definition: mm.h:396
USHORT ReferenceCount
Definition: mm.h:413
USHORT ShortFlags
Definition: mm.h:419
SWAPENTRY SwapEntry
Definition: mm.h:401
ULONG_PTR AweAllocation
Definition: mm.h:441
ULONG_PTR PteFrame
Definition: mm.h:438
PMM_SECTION_SEGMENT Segments
Definition: mm.h:241
PFILE_OBJECT FileObject
Definition: mm.h:233
SECTION_IMAGE_INFORMATION ImageInformation
Definition: mm.h:238
NTSTATUS(* Trim)(ULONG Target, ULONG Priority, PULONG NrFreed)
Definition: mm.h:479
ULONG PagesTarget
Definition: mm.h:478
ULONG PagesUsed
Definition: mm.h:477
PMMPTE LastPteForPagedPool
Definition: mm.h:509
SIZE_T AllocatedPagedPool
Definition: mm.h:513
PRTL_BITMAP EndOfPagedPoolBitmap
Definition: mm.h:507
PRTL_BITMAP PagedPoolAllocationMap
Definition: mm.h:506
PMMPDE NextPdeForPagedPoolExpansion
Definition: mm.h:510
PMMPTE FirstPteForPagedPool
Definition: mm.h:508
ULONG PagedPoolHint
Definition: mm.h:511
SIZE_T PagedPoolCommit
Definition: mm.h:512
Definition: mm.h:483
LIST_ENTRY RegionListEntry
Definition: mm.h:487
ULONG Type
Definition: mm.h:484
SIZE_T Length
Definition: mm.h:486
ULONG Protect
Definition: mm.h:485
Definition: mm.h:277
PVOID Address
Definition: mm.h:280
PEPROCESS Process
Definition: mm.h:279
struct _MM_RMAP_ENTRY * Next
Definition: mm.h:278
LONG64 RefCount
Definition: mm.h:203
PULONG Flags
Definition: mm.h:212
ULONG_PTR VirtualAddress
Definition: mm.h:219
struct _MM_SECTION_SEGMENT::@1840 Image
ULONG SectionCount
Definition: mm.h:210
LARGE_INTEGER RawLength
Definition: mm.h:207
ULONGLONG LastPage
Definition: mm.h:225
BOOLEAN Locked
Definition: mm.h:214
PLONG64 ReferenceCount
Definition: mm.h:209
FAST_MUTEX Lock
Definition: mm.h:206
PFILE_OBJECT FileObject
Definition: mm.h:204
ULONGLONG FileOffset
Definition: mm.h:218
ULONG SegFlags
Definition: mm.h:223
BOOLEAN WriteCopy
Definition: mm.h:213
ULONG Protection
Definition: mm.h:211
ULONG Characteristics
Definition: mm.h:220
RTL_GENERIC_TABLE PageTable
Definition: mm.h:227
LARGE_INTEGER Length
Definition: mm.h:208
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:1572
@ 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