ReactOS 0.4.17-dev-1190-g4c812f4
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
36
45
46extern PVOID MiDebugMapping; // internal
47extern PMMPTE MmDebugPte; // internal
48
50
51//struct _KTRAP_FRAME;
52struct _EPROCESS;
53struct _MM_RMAP_ENTRY;
55
56//
57// Pool Quota values
58//
59#define MI_QUOTA_NON_PAGED_NEEDED_PAGES 64
60#define MI_NON_PAGED_QUOTA_MIN_RESIDENT_PAGES 200
61#define MI_CHARGE_PAGED_POOL_QUOTA 0x80000
62#define MI_CHARGE_NON_PAGED_POOL_QUOTA 0x10000
63
64//
65// Special IRQL value (found in assertions)
66//
67#define MM_NOIRQL ((KIRQL)0xFFFFFFFF)
68
69//
70// MmDbgCopyMemory Flags
71//
72#define MMDBG_COPY_WRITE 0x00000001
73#define MMDBG_COPY_PHYSICAL 0x00000002
74#define MMDBG_COPY_UNSAFE 0x00000004
75#define MMDBG_COPY_CACHED 0x00000008
76#define MMDBG_COPY_UNCACHED 0x00000010
77#define MMDBG_COPY_WRITE_COMBINED 0x00000020
78
79//
80// Maximum chunk size per copy
81//
82#define MMDBG_COPY_MAX_SIZE 0x8
83
84#if defined(_X86_) // intenal for marea.c
85#define MI_STATIC_MEMORY_AREAS (14)
86#else
87#define MI_STATIC_MEMORY_AREAS (13)
88#endif
89
90#define MEMORY_AREA_SECTION_VIEW (1)
91#ifdef NEWCC
92#define MEMORY_AREA_CACHE (2)
93#endif
94#define MEMORY_AREA_OWNED_BY_ARM3 (15)
95#define MEMORY_AREA_STATIC (0x80000000)
96
97/* Although Microsoft says this isn't hardcoded anymore,
98 they won't be able to change it. Stuff depends on it */
99#define MM_VIRTMEM_GRANULARITY (64 * 1024)
100
101#define STATUS_MM_RESTART_OPERATION ((NTSTATUS)0xD0000001)
102
103/*
104 * Additional flags for protection attributes
105 */
106#define PAGE_WRITETHROUGH (1024)
107
108#define MC_USER (0)
109#define MC_SYSTEM (1)
110#define MC_MAXIMUM (2)
111
112#define PAGED_POOL_MASK 1
113#define MUST_SUCCEED_POOL_MASK 2
114#define CACHE_ALIGNED_POOL_MASK 4
115#define QUOTA_POOL_MASK 8
116#define SESSION_POOL_MASK 32
117#define VERIFIER_POOL_MASK 64
118
119#define MAX_PAGING_FILES (16)
120
121// FIXME: use ALIGN_UP_BY
122#define MM_ROUND_UP(x,s) \
123 ((PVOID)(((ULONG_PTR)(x)+(s)-1) & ~((ULONG_PTR)(s)-1)))
124
125#define MM_ROUND_DOWN(x,s) \
126 ((PVOID)(((ULONG_PTR)(x)) & ~((ULONG_PTR)(s)-1)))
127
128/* PAGE_ROUND_UP and PAGE_ROUND_DOWN equivalent, with support for 64-bit-only data types */
129#define PAGE_ROUND_UP_64(x) \
130 (((x) + PAGE_SIZE - 1) & ~(PAGE_SIZE - 1))
131
132#define PAGE_ROUND_DOWN_64(x) \
133 ((x) & ~(PAGE_SIZE - 1))
134
135#define PAGE_FLAGS_VALID_FOR_SECTION \
136 (PAGE_READONLY | \
137 PAGE_READWRITE | \
138 PAGE_WRITECOPY | \
139 PAGE_EXECUTE | \
140 PAGE_EXECUTE_READ | \
141 PAGE_EXECUTE_READWRITE | \
142 PAGE_EXECUTE_WRITECOPY | \
143 PAGE_NOACCESS | \
144 PAGE_NOCACHE | \
145 PAGE_WRITECOMBINE)
146
147#define PAGE_IS_READABLE \
148 (PAGE_READONLY | \
149 PAGE_READWRITE | \
150 PAGE_WRITECOPY | \
151 PAGE_EXECUTE_READ | \
152 PAGE_EXECUTE_READWRITE | \
153 PAGE_EXECUTE_WRITECOPY)
154
155#define PAGE_IS_WRITABLE \
156 (PAGE_READWRITE | \
157 PAGE_WRITECOPY | \
158 PAGE_EXECUTE_READWRITE | \
159 PAGE_EXECUTE_WRITECOPY)
160
161#define PAGE_IS_EXECUTABLE \
162 (PAGE_EXECUTE | \
163 PAGE_EXECUTE_READ | \
164 PAGE_EXECUTE_READWRITE | \
165 PAGE_EXECUTE_WRITECOPY)
166
167#define PAGE_IS_WRITECOPY \
168 (PAGE_WRITECOPY | \
169 PAGE_EXECUTE_WRITECOPY)
170
171//
172// Wait entry for marking pages that are being serviced
173//
174#ifdef _M_IX86
175#define MM_WAIT_ENTRY 0x7ffffc00
176#elif defined(_M_AMD64)
177#define MM_WAIT_ENTRY 0x7FFFFFFFFFFFFC00ULL
178#else
179#error Unsupported architecture!
180#endif
181
182#ifdef _M_AMD64
183#define InterlockedCompareExchangePte(PointerPte, Exchange, Comperand) \
184 InterlockedCompareExchange64((PLONG64)(PointerPte), Exchange, Comperand)
185
186#define InterlockedExchangePte(PointerPte, Value) \
187 InterlockedExchange64((PLONG64)(PointerPte), Value)
188#else
189#define InterlockedCompareExchangePte(PointerPte, Exchange, Comperand) \
190 InterlockedCompareExchange((PLONG)(PointerPte), Exchange, Comperand)
191
192#define InterlockedExchangePte(PointerPte, Value) \
193 InterlockedExchange((PLONG)(PointerPte), Value)
194#endif
195
197{
200
201 FAST_MUTEX Lock; /* lock which protects the page directory */
202 LARGE_INTEGER RawLength; /* length of the segment which is part of the mapped file */
203 LARGE_INTEGER Length; /* absolute length of the segment */
210
211 struct
212 {
213 ULONGLONG FileOffset; /* start offset into the file for image sections */
214 ULONG_PTR VirtualAddress; /* start offset into the address range for image sections */
217
219
221
224
226{
232
238
239#define MM_PHYSICALMEMORY_SEGMENT (0x1)
240#define MM_DATAFILE_SEGMENT (0x2)
241#define MM_SEGMENT_INDELETE (0x4)
242#define MM_SEGMENT_INCREATE (0x8)
243#define MM_IMAGE_SECTION_FLUSH_DELETE (0x10)
244
245
246#define MA_GetStartingAddress(_MemoryArea) ((_MemoryArea)->VadNode.StartingVpn << PAGE_SHIFT)
247#define MA_GetEndingAddress(_MemoryArea) (((_MemoryArea)->VadNode.EndingVpn + 1) << PAGE_SHIFT)
248
249typedef struct _MEMORY_AREA
250{
252
257
258 struct
259 {
265
266#define MI_SET_MEMORY_AREA_VAD(Vad) do { (Vad)->u.VadFlags.Spare |= 1; } while (0)
267#define MI_IS_MEMORY_AREA_VAD(Vad) (((Vad)->u.VadFlags.Spare & 1) != 0)
268#define MI_SET_ROSMM_VAD(Vad) do { (Vad)->u.VadFlags.Spare |= 2; } while (0)
269#define MI_IS_ROSMM_VAD(Vad) (((Vad)->u.VadFlags.Spare & 2) != 0)
270
271typedef struct _MM_RMAP_ENTRY
272{
276#if DBG
277 PVOID Caller;
278#endif
279}
281
282#if MI_TRACE_PFNS
285#define MI_SET_USAGE(x) MI_PFN_CURRENT_USAGE = x
286#define MI_SET_PROCESS2(x) memcpy(MI_PFN_CURRENT_PROCESS_NAME, x, min(sizeof(x), sizeof(MI_PFN_CURRENT_PROCESS_NAME)))
288void
290{
291 if (!Process)
292 MI_SET_PROCESS2("Kernel");
293 else if (Process == (PEPROCESS)1)
294 MI_SET_PROCESS2("Hydra");
295 else
296 MI_SET_PROCESS2(Process->ImageFileName);
297}
298
300void
301MI_SET_PROCESS_USTR(PUNICODE_STRING ustr)
302{
303 PWSTR pos, strEnd;
304 ULONG i;
305
306 if (!ustr->Buffer || ustr->Length == 0)
307 {
309 return;
310 }
311
312 pos = strEnd = &ustr->Buffer[ustr->Length / sizeof(WCHAR)];
313 while ((*pos != L'\\') && (pos > ustr->Buffer))
314 pos--;
315
316 if (*pos == L'\\')
317 pos++;
318
319 for (i = 0; i < sizeof(MI_PFN_CURRENT_PROCESS_NAME) && pos <= strEnd; i++, pos++)
321}
322#else
323#define MI_SET_USAGE(x)
324#define MI_SET_PROCESS(x)
325#define MI_SET_PROCESS2(x)
326#endif
327
328typedef enum _MI_PFN_USAGES
329{
357
358//
359// These two mappings are actually used by Windows itself, based on the ASSERTS
360//
361#define StartOfAllocation ReadInProgress
362#define EndOfAllocation WriteInProgress
363
364typedef struct _MMPFNENTRY
365{
367 USHORT ReadInProgress:1; // StartOfAllocation
368 USHORT WriteInProgress:1; // EndOfAllocation
377
378#ifdef _WIN64
379#define MI_PTE_FRAME_BITS 57
380#else
381#define MI_PTE_FRAME_BITS 25
382#endif
383
384// Mm internal
385typedef struct _MMPFN
386{
387 union
388 {
394
395 // HACK for ROSPFN
397 } u1;
399 union
400 {
403 } u2;
404 union
405 {
406 struct
407 {
410 };
411 struct
412 {
415 } e2;
416 } u3;
417#ifdef _WIN64
418 ULONG UsedPageTableEntries;
419#endif
420 union
421 {
424
425 // HACK for ROSPFN
427 };
428 union
429 {
431 struct
432 {
439 };
440 } u4;
441#if MI_TRACE_PFNS
442 MI_PFN_USAGES PfnUsage;
443 CHAR ProcessName[16];
444#define MI_SET_PFN_PROCESS_NAME(pfn, x) memcpy(pfn->ProcessName, x, min(sizeof(x), sizeof(pfn->ProcessName)))
445 PVOID CallSite;
446#endif
447
448 // HACK until WS lists are supported
453
454extern PMMPFN MmPfnDatabase;
455
456typedef struct _MMPFNLIST
457{
463
469
471{
476
477typedef struct _MM_REGION
478{
484
485// Mm internal
486/* Entry describing free pool memory */
487typedef struct _MMFREE_POOL_ENTRY
488{
494
495/* Signature of a freed block */
496#define MM_FREE_POOL_SIGNATURE 'ARM3'
497
498/* Paged pool information */
500{
510
512
513/* Page file information */
514typedef struct _MMPAGING_FILE
515{
525}
527
529
530typedef VOID
535 ULONG OldType,
536 ULONG OldProtect,
537 ULONG NewType,
539);
540
541typedef VOID
547 SWAPENTRY SwapEntry,
548 BOOLEAN Dirty
549);
550
551//
552// Mm copy support for Kd
553//
555NTAPI
559 IN ULONG Size,
561);
562
563//
564// Determines if a given address is a session address
565//
567NTAPI
570);
571
572ULONG
573NTAPI
576);
577
578ULONG
579NTAPI
582);
583
584/* marea.c *******************************************************************/
585
587NTAPI
590 ULONG Type,
593 ULONG Protection,
595 ULONG AllocationFlags,
596 ULONG AllocationGranularity
597);
598
600NTAPI
604);
605
607NTAPI
612 PVOID FreePageContext
613);
614
615VOID
616NTAPI
619 PMMVAD Vad);
620
622NTAPI
627);
628
630NTAPI
635
636PVOID
637NTAPI
641 ULONG_PTR Granularity,
642 BOOLEAN TopDown
643);
644
645/* npool.c *******************************************************************/
646
647CODE_SEG("INIT")
648VOID
649NTAPI
651
652PVOID
653NTAPI
656 IN SIZE_T SizeInBytes
657);
658
660NTAPI
663);
664
665ULONG
666NTAPI
668 IN PVOID StartingAddress
669);
670
671/* pool.c *******************************************************************/
672
675NTAPI
676MmRaisePoolQuota(
680);
681
683VOID
684NTAPI
685MmReturnPoolQuota(
688);
689
690/* mdl.c *********************************************************************/
691
692VOID
693NTAPI
695 PMDL Mdl,
696 PPFN_NUMBER Pages
697);
698
699/* mminit.c ******************************************************************/
700
701CODE_SEG("INIT")
703NTAPI
704MmInitSystem(IN ULONG Phase,
705 IN PLOADER_PARAMETER_BLOCK LoaderBlock);
706
707
708/* pagefile.c ****************************************************************/
709
711NTAPI
713
714VOID
715NTAPI
717
718CODE_SEG("INIT")
719VOID
720NTAPI
722
724NTAPI
726
728NTAPI
730 SWAPENTRY SwapEntry,
732);
733
735NTAPI
737 SWAPENTRY SwapEntry,
739);
740
741VOID
742NTAPI
744
746NTAPI
749 _In_ ULONG PageFileIndex,
750 _In_ ULONG_PTR PageFileOffset);
751
752/* process.c ****************************************************************/
753
755NTAPI
759 IN PVOID Section OPTIONAL,
762);
763
765NTAPI
768 IN PINITIAL_PEB InitialPeb,
769 OUT PPEB *BasePeb
770);
771
773NTAPI
777 IN PINITIAL_TEB InitialTeb,
778 OUT PTEB* BaseTeb
779);
780
781VOID
782NTAPI
785 PTEB Teb
786);
787
788VOID
789NTAPI
791
792VOID
793NTAPI
795
796ULONG
797NTAPI
799
801NTAPI
804 IN UCHAR MemoryPriority
805);
806
807/* special.c *****************************************************************/
808
809VOID
810NTAPI
812
814NTAPI
817 IN ULONG Tag);
818
820NTAPI
822 IN PVOID P);
823
825NTAPI
827 IN PVOID P);
828
829PVOID
830NTAPI
833 IN ULONG Tag,
835 IN ULONG SpecialType);
836
837VOID
838NTAPI
840 IN PVOID P);
841
842/* mm.c **********************************************************************/
843
845NTAPI
847 IN ULONG FaultCode,
850 IN PVOID TrapInformation
851);
852
853/* process.c *****************************************************************/
854
855PVOID
856NTAPI
858
859VOID
860NTAPI
862 BOOLEAN GuiStack);
863
864/* balance.c / pagefile.c******************************************************/
865
867{
868 /*
869 * Add up all the used "Committed" memory + pagefile.
870 * Not sure this is right. 8^\
871 * MmTotalCommittedPages should be adjusted consistently with
872 * other counters at different places.
873 *
874 MmTotalCommittedPages = MiMemoryConsumers[MC_SYSTEM].PagesUsed +
875 MiMemoryConsumers[MC_USER].PagesUsed +
876 MiUsedSwapPages;
877 */
878
879 /* Update Commitment */
880 SIZE_T TotalCommittedPages = InterlockedExchangeAddSizeT(&MmTotalCommittedPages, Delta) + Delta;
881
882 /* Update Peak = max(Peak, Total) in a lockless way */
883 SIZE_T PeakCommitment = MmPeakCommitment;
884 while (TotalCommittedPages > PeakCommitment &&
885 InterlockedCompareExchangeSizeT(&MmPeakCommitment, TotalCommittedPages, PeakCommitment) != PeakCommitment)
886 {
887 PeakCommitment = MmPeakCommitment;
888 }
889}
890
891/* balance.c *****************************************************************/
892
893CODE_SEG("INIT")
894VOID
895NTAPI
897 ULONG Consumer,
898 NTSTATUS (*Trim)(ULONG Target, ULONG Priority, PULONG NrFreed)
899);
900
901CODE_SEG("INIT")
902VOID
903NTAPI
905 ULONG NrAvailablePages,
906 ULONG NrSystemPages
907);
908
910NTAPI
912 ULONG Consumer,
914);
915
917NTAPI
919 ULONG Consumer,
920 BOOLEAN MyWait,
921 PPFN_NUMBER AllocatedPage
922);
923
924CODE_SEG("INIT")
925VOID
926NTAPI
928
929VOID
930NTAPI
932
933/* rmap.c **************************************************************/
934#define RMAP_SEGMENT_MASK ~((ULONG_PTR)0xff)
935#define RMAP_IS_SEGMENT(x) (((ULONG_PTR)(x) & RMAP_SEGMENT_MASK) == RMAP_SEGMENT_MASK)
936
937VOID
938NTAPI
941 struct _MM_RMAP_ENTRY* ListHead
942);
943
944struct _MM_RMAP_ENTRY*
945NTAPI
947
948VOID
949NTAPI
952 struct _EPROCESS *Process,
954);
955
956VOID
957NTAPI
961 VOID (*DeleteMapping)(PVOID Context, struct _EPROCESS *Process, PVOID Address)
962);
963
964VOID
965NTAPI
968 struct _EPROCESS *Process,
970);
971
972CODE_SEG("INIT")
973VOID
974NTAPI
976
978NTAPI
980
982NTAPI
985
986/* freelist.c **********************************************************/
993KIRQL
994MiAcquirePfnLock(VOID)
995{
997}
998
1003VOID
1004MiReleasePfnLock(
1006{
1008}
1009
1014VOID
1015MiAcquirePfnLockAtDpcLevel(VOID)
1016{
1017 PKSPIN_LOCK_QUEUE LockQueue;
1018
1020 LockQueue = &KeGetCurrentPrcb()->LockQueue[LockQueuePfnLock];
1021 KeAcquireQueuedSpinLockAtDpcLevel(LockQueue);
1022}
1023
1028VOID
1029MiReleasePfnLockFromDpcLevel(VOID)
1030{
1031 PKSPIN_LOCK_QUEUE LockQueue;
1032
1033 LockQueue = &KeGetCurrentPrcb()->LockQueue[LockQueuePfnLock];
1034 KeReleaseQueuedSpinLockFromDpcLevel(LockQueue);
1036}
1037
1038#define MI_ASSERT_PFN_LOCK_HELD() NT_ASSERT((KeGetCurrentIrql() >= DISPATCH_LEVEL) && (MmPfnLock != 0))
1039
1041PMMPFN
1043{
1044 PMMPFN Page;
1045 extern RTL_BITMAP MiPfnBitMap;
1046
1047 /* Make sure the PFN number is valid */
1048 if (Pfn > MmHighestPhysicalPage) return NULL;
1049
1050 /* Make sure this page actually has a PFN entry */
1051 if ((MiPfnBitMap.Buffer) && !(RtlTestBit(&MiPfnBitMap, (ULONG)Pfn))) return NULL;
1052
1053 /* Get the entry */
1054 Page = &MmPfnDatabase[Pfn];
1055
1056 /* Return it */
1057 return Page;
1058};
1059
1063{
1064 //
1065 // This will return the Page Frame Number (PFN) from the MMPFN
1066 //
1067 return Pfn1 - MmPfnDatabase;
1068}
1069
1071NTAPI
1072MmGetLRUNextUserPage(PFN_NUMBER PreviousPage, BOOLEAN MoveToLast);
1073
1075NTAPI
1077
1078VOID
1079NTAPI
1081 IN BOOLEAN StatusOnly
1082);
1083
1084VOID
1085NTAPI
1087 VOID
1088);
1089
1090/* hypermap.c *****************************************************************/
1091PVOID
1092NTAPI
1095 IN PKIRQL OldIrql);
1096
1097VOID
1098NTAPI
1101 IN KIRQL OldIrql);
1102
1103PVOID
1104NTAPI
1106 IN PFN_NUMBER NumberOfPages);
1107
1108VOID
1109NTAPI
1111 IN PFN_NUMBER NumberOfPages);
1112
1113/* i386/page.c *********************************************************/
1114
1116NTAPI
1118 struct _EPROCESS* Process,
1119 PVOID Address,
1120 ULONG flProtect,
1122);
1123
1125NTAPI
1127 struct _EPROCESS* Process,
1128 PVOID Address,
1129 ULONG flProtect,
1131);
1132
1134NTAPI
1138 _In_ ULONG flProtect,
1140
1141ULONG
1142NTAPI
1144 struct _EPROCESS* Process,
1145 PVOID Address);
1146
1147VOID
1148NTAPI
1150 struct _EPROCESS* Process,
1151 PVOID Address,
1152 ULONG flProtect
1153);
1154
1155BOOLEAN
1156NTAPI
1158 struct _EPROCESS* Process,
1160);
1161
1162BOOLEAN
1163NTAPI
1165 struct _EPROCESS* Process,
1167);
1168
1169CODE_SEG("INIT")
1170VOID
1171NTAPI
1173
1174VOID
1175NTAPI
1178 PVOID Address,
1179 SWAPENTRY* SwapEntry
1180);
1181
1183NTAPI
1186 PVOID Address,
1187 SWAPENTRY SwapEntry
1188);
1189
1190VOID
1191NTAPI
1194 PVOID Address,
1195 SWAPENTRY *SwapEntry);
1196
1197BOOLEAN
1198NTAPI
1202);
1203
1205NTAPI
1207 ULONG Consumer
1208);
1209
1210VOID
1211NTAPI
1213
1214VOID
1215NTAPI
1217
1218ULONG
1219NTAPI
1221
1222BOOLEAN
1223NTAPI
1225
1226VOID
1227NTAPI
1230 SWAPENTRY SavedSwapEntry);
1231
1233NTAPI
1235
1236VOID
1237NTAPI
1239#define MmSetCleanPage(__P, __A) MmSetDirtyBit(__P, __A, FALSE)
1240#define MmSetDirtyPage(__P, __A) MmSetDirtyBit(__P, __A, TRUE)
1241
1243NTAPI
1245 struct _EPROCESS *Process,
1247);
1248
1249BOOLEAN
1250NTAPI
1252 IN ULONG MinWs,
1253 IN PEPROCESS Dest,
1254 IN PULONG_PTR DirectoryTableBase
1255);
1256
1257CODE_SEG("INIT")
1259NTAPI
1262 IN PULONG_PTR DirectoryTableBase
1263);
1264
1265CODE_SEG("INIT")
1267NTAPI
1270);
1271
1273NTAPI
1274MmSetExecuteOptions(IN ULONG ExecuteOptions);
1275
1277NTAPI
1278MmGetExecuteOptions(IN PULONG ExecuteOptions);
1279
1281BOOLEAN
1287);
1288
1290BOOLEAN
1291MmDeletePhysicalMapping(
1296);
1297
1298/* arch/procsup.c ************************************************************/
1299
1300BOOLEAN
1303 _In_ PULONG_PTR DirectoryTableBase);
1304
1305/* wset.c ********************************************************************/
1306
1309 ULONG Target,
1311 PULONG NrFreedPages
1312);
1313
1314/* region.c ************************************************************/
1315
1317NTAPI
1321 PLIST_ENTRY RegionListHead,
1322 PVOID StartAddress,
1323 SIZE_T Length,
1324 ULONG NewType,
1326 PMM_ALTER_REGION_FUNC AlterFunc
1327);
1328
1329VOID
1330NTAPI
1332 PLIST_ENTRY RegionListHead,
1333 SIZE_T Length,
1334 ULONG Type,
1336);
1337
1339NTAPI
1342 PLIST_ENTRY RegionListHead,
1343 PVOID Address,
1344 PVOID* RegionBaseAddress
1345);
1346
1347/* section.c *****************************************************************/
1348
1349#define PFN_FROM_SSE(E) ((PFN_NUMBER)((E) >> PAGE_SHIFT))
1350#define IS_SWAP_FROM_SSE(E) ((E) & 0x00000001)
1351#define MM_IS_WAIT_PTE(E) \
1352 (IS_SWAP_FROM_SSE(E) && SWAPENTRY_FROM_SSE(E) == MM_WAIT_ENTRY)
1353#define MAKE_PFN_SSE(P) ((ULONG_PTR)((P) << PAGE_SHIFT))
1354#define SWAPENTRY_FROM_SSE(E) ((E) >> 1)
1355#define MAKE_SWAP_SSE(S) (((ULONG_PTR)(S) << 1) | 0x1)
1356#define DIRTY_SSE(E) ((E) | 2)
1357#define CLEAN_SSE(E) ((E) & ~2)
1358#define IS_DIRTY_SSE(E) ((E) & 2)
1359#define WRITE_SSE(E) ((E) | 4)
1360#define IS_WRITE_SSE(E) ((E) & 4)
1361#ifdef _WIN64
1362#define PAGE_FROM_SSE(E) ((E) & 0xFFFFFFF000ULL)
1363#else
1364#define PAGE_FROM_SSE(E) ((E) & 0xFFFFF000)
1365#endif
1366#define SHARE_COUNT_FROM_SSE(E) (((E) & 0x00000FFC) >> 3)
1367#define MAX_SHARE_COUNT 0x1FF
1368#define MAKE_SSE(P, C) ((ULONG_PTR)((P) | ((C) << 3)))
1369#define BUMPREF_SSE(E) (PAGE_FROM_SSE(E) | ((SHARE_COUNT_FROM_SSE(E) + 1) << 3) | ((E) & 0x7))
1370#define DECREF_SSE(E) (PAGE_FROM_SSE(E) | ((SHARE_COUNT_FROM_SSE(E) - 1) << 3) | ((E) & 0x7))
1371
1372VOID
1373NTAPI
1375 const char *file,
1376 int line);
1377
1378#define MmLockSectionSegment(x) _MmLockSectionSegment(x,__FILE__,__LINE__)
1379
1380VOID
1381NTAPI
1383 const char *file,
1384 int line);
1385
1386#define MmUnlockSectionSegment(x) _MmUnlockSectionSegment(x,__FILE__,__LINE__)
1387
1388VOID
1389NTAPI
1391 OUT PSECTION_IMAGE_INFORMATION ImageInformation
1392);
1393
1395NTAPI
1397 IN PVOID Section
1398);
1400NTAPI
1404);
1405
1407NTAPI
1409 IN PVOID Section,
1411);
1412
1414NTAPI
1417 PVOID Address,
1420);
1421
1423NTAPI
1428 SIZE_T Length,
1429 ULONG Protect,
1430 PULONG OldProtect
1431);
1432
1433CODE_SEG("INIT")
1435NTAPI
1437
1439NTAPI
1443 PVOID Address,
1445);
1446
1448NTAPI
1452 PVOID Address,
1454);
1455
1456CODE_SEG("INIT")
1458NTAPI
1460
1462NTAPI
1466 PVOID Address,
1468);
1469
1470VOID
1471NTAPI
1473
1474/* Exported from NT 6.2 onward. We keep it internal. */
1476NTAPI
1478 _In_ PVOID Section,
1483
1484BOOLEAN
1485NTAPI
1489 _In_ ULONG Length);
1490
1492NTAPI
1496 _In_ ULONG Length);
1497
1499NTAPI
1505
1507NTAPI
1512 _In_ PLARGE_INTEGER ValidDataLength);
1513
1514BOOLEAN
1515NTAPI
1519 _In_ ULONG Length);
1520
1521BOOLEAN
1522NTAPI
1528
1529BOOLEAN
1530NTAPI
1534 BOOLEAN Dirty,
1536 ULONG_PTR *InEntry);
1537
1543VOID
1544NTAPI
1545MmDereferenceSegmentWithLock(
1548
1552VOID
1553MmDereferenceSegment(PMM_SECTION_SEGMENT Segment)
1554{
1555 MmDereferenceSegmentWithLock(Segment, MM_NOIRQL);
1556}
1557
1559NTAPI
1561 _In_ PVOID Section,
1563
1564/* sptab.c *******************************************************************/
1565
1567NTAPI
1571 const char *file,
1572 int line);
1573
1575NTAPI
1578 const char *file,
1579 int line);
1580
1581#define MmSetPageEntrySectionSegment(S,O,E) _MmSetPageEntrySectionSegment(S,O,E,__FILE__,__LINE__)
1582
1583#define MmGetPageEntrySectionSegment(S,O) _MmGetPageEntrySectionSegment(S,O,__FILE__,__LINE__)
1584
1585/* sysldr.c ******************************************************************/
1586
1587CODE_SEG("INIT")
1588VOID
1589NTAPI
1591 IN PLOADER_PARAMETER_BLOCK LoaderBlock
1592);
1593
1594CODE_SEG("INIT")
1595BOOLEAN
1596NTAPI
1598 IN PLOADER_PARAMETER_BLOCK LoaderBlock
1599);
1600
1601BOOLEAN
1602NTAPI
1604
1605VOID
1606NTAPI
1608
1610NTAPI
1613 IN PUNICODE_STRING NamePrefix OPTIONAL,
1614 IN PUNICODE_STRING LoadedName OPTIONAL,
1615 IN ULONG Flags,
1616 OUT PVOID *ModuleObject,
1617 OUT PVOID *ImageBaseAddress
1618);
1619
1621NTAPI
1623 IN PVOID ImageHandle
1624);
1625
1626#ifdef CONFIG_SMP
1627BOOLEAN
1628NTAPI
1629MmVerifyImageIsOkForMpUse(
1631#endif // CONFIG_SMP
1632
1634NTAPI
1636 _In_ HANDLE ImageHandle);
1637
1639NTAPI
1641 _In_ PLDR_DATA_TABLE_ENTRY LdrEntry,
1643
1644VOID
1645NTAPI
1647 IN PLDR_DATA_TABLE_ENTRY LdrEntry);
1648
1649/* ReactOS-only, used by psmgr.c PspLookupSystemDllEntryPoint() as well */
1651NTAPI
1653 _In_ PVOID ImageBase,
1654 _In_ PCSTR ExportName,
1656 _Out_opt_ PBOOLEAN IsForwarder,
1657 _In_ NTSTATUS NotFoundStatus);
1658
1659/* Exported from NT 10.0 onward. We keep it internal. */
1660PVOID
1661NTAPI
1663 _In_ PVOID ImageBase,
1664 _In_ PCSTR ExportName);
1665
1666/* procsup.c *****************************************************************/
1667
1669NTAPI
1671 IN PVOID StackPointer
1672);
1673
1674
1676VOID
1678{
1679 ASSERT(!PsGetCurrentThread()->OwnsProcessWorkingSetExclusive);
1680 ASSERT(!PsGetCurrentThread()->OwnsProcessWorkingSetShared);
1681 ASSERT(!PsGetCurrentThread()->OwnsSystemWorkingSetExclusive);
1682 ASSERT(!PsGetCurrentThread()->OwnsSystemWorkingSetShared);
1683 ASSERT(!PsGetCurrentThread()->OwnsSessionWorkingSetExclusive);
1684 ASSERT(!PsGetCurrentThread()->OwnsSessionWorkingSetShared);
1685 KeAcquireGuardedMutex(&CONTAINING_RECORD(AddressSpace, EPROCESS, Vm)->AddressCreationLock);
1686}
1687
1689VOID
1691{
1692 KeReleaseGuardedMutex(&CONTAINING_RECORD(AddressSpace, EPROCESS, Vm)->AddressCreationLock);
1693}
1694
1698{
1699 if (AddressSpace == MmKernelAddressSpace) return NULL;
1701}
1702
1706{
1707 return &((PEPROCESS)KeGetCurrentThread()->ApcState.Process)->Vm;
1708}
1709
1713{
1714 return MmKernelAddressSpace;
1715}
1716
1717
1718/* expool.c ******************************************************************/
1719
1720VOID
1721NTAPI
1723 PVOID P,
1725 ULONG Tag);
1726
1727VOID
1728NTAPI
1730 IN PVOID P);
1731
1732
1733/* mmsup.c *****************************************************************/
1734
1736NTAPI
1738 IN SIZE_T WorkingSetMinimumInBytes,
1739 IN SIZE_T WorkingSetMaximumInBytes,
1740 IN ULONG SystemCache,
1741 IN BOOLEAN IncreaseOkay);
1742
1743
1744/* session.c *****************************************************************/
1745
1748NTAPI
1749MmAttachSession(
1750 _Inout_ PVOID SessionEntry,
1752
1754VOID
1755NTAPI
1756MmDetachSession(
1757 _Inout_ PVOID SessionEntry,
1759
1760VOID
1761NTAPI
1763 _Inout_ PVOID SessionEntry);
1764
1765PVOID
1766NTAPI
1769
1771VOID
1772NTAPI
1773MmSetSessionLocaleId(
1775
1776/* shutdown.c *****************************************************************/
1777
1778VOID
1780
1781/* virtual.c *****************************************************************/
1782
1784NTAPI
1785MmCopyVirtualMemory(IN PEPROCESS SourceProcess,
1787 IN PEPROCESS TargetProcess,
1791 OUT PSIZE_T ReturnSize);
1792
1793/* wslist.cpp ****************************************************************/
1794_Requires_exclusive_lock_held_(WorkingSet->WorkingSetMutex)
1795VOID
1796NTAPI
1798
1799#ifdef __cplusplus
1800} // extern "C"
1801
1802namespace ntoskrnl
1803{
1804using MiPfnLockGuard = const KiQueuedSpinLockGuard<LockQueuePfnLock>;
1805} // namespace ntoskrnl
1806
1807#endif
#define CODE_SEG(...)
_In_ PVOID _In_ ULONG _Out_ PVOID _In_ ULONG _Inout_ PULONG _In_ KPROCESSOR_MODE PreviousMode
ULONG_PTR PFN_NUMBER
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
unsigned char BOOLEAN
Definition: actypes.h:127
@ INIT
Definition: arabic.c:42
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
_In_ ULONG BufferSize
Definition: dispmprt.h:490
_In_ ULONG _In_ MEMORY_CACHING_TYPE _Out_ PPHYSICAL_ADDRESS _Out_ PVOID * VirtualAddress
Definition: dispmprt.h:716
_In_ D3DDDI_VIDEO_PRESENT_TARGET_ID _In_ ULONG _In_ ULONG Flags
Definition: dispmprt.h:245
#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
_In_ UCXUSBDEVICE _In_ UCXENDPOINT _In_ ULONG Priority
Definition: hubucx.h:414
#define InterlockedExchangeAddSizeT(a, b)
Definition: interlocked.h:211
LIST_ENTRY * ModuleListHead
Definition: kdpacket.c:23
_In_ PIRP _In_ PIO_COMPLETION_ROUTINE _In_ PVOID Context
Definition: kse.h:81
#define ASSERT(a)
Definition: mode.c:44
unsigned __int64 ULONG64
Definition: imports.h:198
FORCEINLINE struct _KPRCB * KeGetCurrentPrcb(VOID)
Definition: ketypes.h:1197
_In_ HANDLE _Outptr_result_bytebuffer_ ViewSize _Pre_valid_ PVOID _In_ ULONG_PTR _In_ SIZE_T _Inout_opt_ PLARGE_INTEGER SectionOffset
Definition: mmfuncs.h:411
_In_ HANDLE _Outptr_result_bytebuffer_ ViewSize _Pre_valid_ PVOID * BaseAddress
Definition: mmfuncs.h:408
_In_ HANDLE _Outptr_result_bytebuffer_ ViewSize _Pre_valid_ PVOID _In_ ULONG_PTR _In_ SIZE_T _Inout_opt_ PLARGE_INTEGER _Inout_ PSIZE_T ViewSize
Definition: mmfuncs.h:412
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:1209
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
PVOID MmTriageActionTaken
Definition: drvmgmt.c:27
_In_ SIZE_T _Out_ PSIZE_T NewMaxQuota
Definition: mm.h:680
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:2284
FORCEINLINE PMMSUPPORT MmGetCurrentAddressSpace(VOID)
Definition: mm.h:1705
FORCEINLINE PMMPFN MiGetPfnEntry(IN PFN_NUMBER Pfn)
Definition: mm.h:1042
struct _MMPFNLIST MMPFNLIST
VOID NTAPI MmDeleteKernelStack(PVOID Stack, BOOLEAN GuiStack)
VOID NTAPI MmMakeKernelResourceSectionWritable(VOID)
Definition: sysldr.c:2404
enum _MI_PFN_USAGES MI_PFN_USAGES
#define MI_SET_PROCESS2(x)
Definition: mm.h:325
#define MM_NOIRQL
Definition: mm.h:67
_MI_PFN_USAGES
Definition: mm.h:329
@ MI_USAGE_NONPAGED_POOL_EXPANSION
Definition: mm.h:333
@ MI_USAGE_LEGACY_PAGE_DIRECTORY
Definition: mm.h:342
@ MI_USAGE_PAGE_FILE
Definition: mm.h:352
@ MI_USAGE_NOT_SET
Definition: mm.h:330
@ MI_USAGE_COW
Definition: mm.h:353
@ MI_USAGE_PEB_TEB
Definition: mm.h:338
@ MI_USAGE_PAGE_TABLE
Definition: mm.h:340
@ MI_USAGE_INIT_MEMORY
Definition: mm.h:351
@ MI_USAGE_VAD
Definition: mm.h:337
@ MI_USAGE_SYSTEM_PTE
Definition: mm.h:336
@ MI_USAGE_CONTINOUS_ALLOCATION
Definition: mm.h:344
@ MI_USAGE_PAGED_POOL
Definition: mm.h:331
@ MI_USAGE_MDL
Definition: mm.h:345
@ MI_USAGE_PFN_DATABASE
Definition: mm.h:349
@ MI_USAGE_ZERO_LOOP
Definition: mm.h:347
@ MI_USAGE_DRIVER_PAGE
Definition: mm.h:343
@ MI_USAGE_DEMAND_ZERO
Definition: mm.h:346
@ MI_USAGE_SECTION
Definition: mm.h:339
@ MI_USAGE_WSLE
Definition: mm.h:354
@ MI_USAGE_FREE_PAGE
Definition: mm.h:355
@ MI_USAGE_PAGE_DIRECTORY
Definition: mm.h:341
@ MI_USAGE_CACHE
Definition: mm.h:348
@ MI_USAGE_KERNEL_STACK_EXPANSION
Definition: mm.h:335
@ MI_USAGE_KERNEL_STACK
Definition: mm.h:334
@ MI_USAGE_NONPAGED_POOL
Definition: mm.h:332
@ MI_USAGE_BOOT_DRIVER
Definition: mm.h:350
FORCEINLINE VOID MmLockAddressSpace(PMMSUPPORT AddressSpace)
Definition: mm.h:1677
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:2991
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:1553
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:5062
VOID NTAPI MmDereferencePage(PFN_NUMBER Page)
Definition: freelist.c:566
VOID NTAPI MmGetPageFileMapping(PEPROCESS Process, PVOID Address, SWAPENTRY *SwapEntry)
Definition: page.c:283
ULONG NTAPI MmGetPageProtect(struct _EPROCESS *Process, PVOID Address)
SIZE_T MmTotalCommitLimit
Definition: mminit.c:360
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:1683
NTSTATUS NTAPI MmCreateMemoryArea(PMMSUPPORT AddressSpace, ULONG Type, PVOID *BaseAddress, SIZE_T Length, ULONG Protection, PMEMORY_AREA *Result, ULONG AllocationFlags, ULONG AllocationGranularity)
VOID NTAPI MmCleanProcessAddressSpace(IN PEPROCESS Process)
Definition: procsup.c:1319
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:678
NTSTATUS NTAPI MmCheckSystemImage(_In_ HANDLE ImageHandle)
Definition: sysldr.c:2796
NTSTATUS NTAPI MmNotPresentFaultSectionView(PMMSUPPORT AddressSpace, MEMORY_AREA *MemoryArea, PVOID Address, BOOLEAN Locked)
Definition: section.c:1560
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:397
NTSTATUS NTAPI MmCreateTeb(IN PEPROCESS Process, IN PCLIENT_ID ClientId, IN PINITIAL_TEB InitialTeb, OUT PTEB *BaseTeb)
Definition: procsup.c:809
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:1285
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:1062
MMPFNLIST MmStandbyPageListHead
Definition: pfnlist.c:43
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:1466
BOOLEAN NTAPI MmIsFileObjectAPagingFile(PFILE_OBJECT FileObject)
Definition: pagefile.c:119
VOID NTAPI MmFreeDriverInitialization(IN PLDR_DATA_TABLE_ENTRY LdrEntry)
Definition: sysldr.c:1715
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:4905
BOOLEAN NTAPI MmUnsharePageEntrySectionSegment(PMEMORY_AREA MemoryArea, PMM_SECTION_SEGMENT Segment, PLARGE_INTEGER Offset, BOOLEAN Dirty, BOOLEAN PageOut, ULONG_PTR *InEntry)
Definition: section.c:1091
NTSTATUS NTAPI MmQuerySectionView(PMEMORY_AREA MemoryArea, PVOID Address, PMEMORY_BASIC_INFORMATION Info, PSIZE_T ResultLength)
Definition: section.c:2135
NTSTATUS NTAPI MmProtectSectionView(PMMSUPPORT AddressSpace, PMEMORY_AREA MemoryArea, PVOID BaseAddress, SIZE_T Length, ULONG Protect, PULONG OldProtect)
Definition: section.c:2091
MMPFNLIST MmModifiedPageListHead
Definition: pfnlist.c:45
struct _MMPAGING_FILE * PMMPAGING_FILE
#define MI_PTE_FRAME_BITS
Definition: mm.h:381
_In_ PVOID _Out_opt_ BOOLEAN _Out_opt_ PPFN_NUMBER Page
Definition: mm.h:1287
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:1773
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:1413
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:1630
VOID NTAPI MiUnmapPagesInZeroSpace(IN PVOID VirtualAddress, IN PFN_NUMBER NumberOfPages)
Definition: hypermap.c:186
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:574
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:340
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:464
NTSTATUS NTAPI MmInitializeHandBuiltProcess(IN PEPROCESS Process, IN PULONG_PTR DirectoryTableBase)
Definition: procsup.c:1183
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:1938
FORCEINLINE VOID UpdateTotalCommittedPages(LONG Delta)
Definition: mm.h:866
struct _MEMORY_AREA * PMEMORY_AREA
UCHAR MmDisablePagingExecutive
Definition: mminit.c:25
ULONG_PTR SWAPENTRY
Definition: mm.h:54
NTSTATUS NTAPI MmUnloadSystemImage(IN PVOID ImageHandle)
Definition: sysldr.c:976
BOOLEAN NTAPI MmIsPageInUse(PFN_NUMBER Page)
Definition: freelist.c:559
NTSTATUS NTAPI MmSetExecuteOptions(IN ULONG ExecuteOptions)
Definition: pagfault.c:2716
PFN_NUMBER NTAPI MmGetPfnForProcess(struct _EPROCESS *Process, PVOID Address)
BOOLEAN NTAPI MmChangeKernelResourceSectionProtection(IN ULONG_PTR ProtectionMask)
Definition: sysldr.c:2373
MMPFNLIST MmModifiedNoWritePageListHead
Definition: pfnlist.c:47
NTSTATUS NTAPI MmGrowKernelStack(IN PVOID StackPointer)
Definition: procsup.c:533
FORCEINLINE VOID MmUnlockAddressSpace(PMMSUPPORT AddressSpace)
Definition: mm.h:1690
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:543
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:5000
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:542
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:5119
SIZE_T MmtotalCommitLimitMaximum
Definition: freelist.c:36
NTSTATUS NTAPI MmExtendSection(_In_ PVOID Section, _Inout_ PLARGE_INTEGER NewSize)
Definition: section.c:5451
NTSTATUS NTAPI MmInitSectionImplementation(VOID)
Definition: section.c:2330
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:1697
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:1751
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:1704
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:110
NTSTATUS NTAPI MmMakeDataSectionResident(_In_ PSECTION_OBJECT_POINTERS SectionObjectPointer, _In_ LONGLONG Offset, _In_ ULONG Length, _In_ PLARGE_INTEGER ValidDataLength)
Definition: section.c:5042
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:398
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:2674
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:4517
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:217
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)
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:432
ULONG MmNumberOfPagingFiles
Definition: pagefile.c:63
SIZE_T MmTotalCommittedPages
Definition: freelist.c:30
#define MAX_PAGING_FILES
Definition: mm.h:119
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:1712
VOID NTAPI MmInitGlobalKernelPageDirectory(VOID)
Definition: page.c:261
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:688
PMEMORY_AREA NTAPI MmLocateMemoryAreaByRegion(PMMSUPPORT AddressSpace, PVOID Address, SIZE_T Length)
VOID(* PMM_ALTER_REGION_FUNC)(PMMSUPPORT AddressSpace, PVOID BaseAddress, SIZE_T Length, ULONG OldType, ULONG OldProtect, ULONG NewType, ULONG NewProtect)
Definition: mm.h:531
NTSTATUS NTAPI MmCreatePhysicalMemorySection(VOID)
Definition: section.c:2239
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:324
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
short WCHAR
Definition: pedump.c:58
long LONG
Definition: pedump.c:60
unsigned short USHORT
Definition: pedump.c:61
char CHAR
Definition: pedump.c:57
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:5205
Entry
Definition: section.c:5216
PLARGE_INTEGER BOOLEAN ForceDirty
Definition: section.c:5203
STDMETHOD() Clone(THIS_ IEnumAssociationElements **ppNew) PURE
PULONG MinorVersion OPTIONAL
Definition: CrossNt.h:68
Definition: btrfs_drv.h:1876
Definition: typedefs.h:120
LONGLONG ViewOffset
Definition: mm.h:260
PMM_SECTION_SEGMENT Segment
Definition: mm.h:261
LIST_ENTRY RegionListHead
Definition: mm.h:262
ULONG Flags
Definition: mm.h:254
ULONG Magic
Definition: mm.h:256
BOOLEAN DeleteInProgress
Definition: mm.h:255
ULONG Type
Definition: mm.h:253
MMVAD VadNode
Definition: mm.h:251
struct _MEMORY_AREA::@2098 SectionData
Definition: mm.h:488
ULONG Signature
Definition: mm.h:491
struct _MMFREE_POOL_ENTRY * Owner
Definition: mm.h:492
PFN_COUNT Size
Definition: mm.h:490
LIST_ENTRY List
Definition: mm.h:489
PFN_NUMBER MinimumSize
Definition: mm.h:518
UNICODE_STRING PageFileName
Definition: mm.h:522
PFN_NUMBER Size
Definition: mm.h:516
PRTL_BITMAP Bitmap
Definition: mm.h:523
PFN_NUMBER CurrentUsage
Definition: mm.h:520
PFN_NUMBER FreeSpace
Definition: mm.h:519
PFILE_OBJECT FileObject
Definition: mm.h:521
PFN_NUMBER MaximumSize
Definition: mm.h:517
HANDLE FileHandle
Definition: mm.h:524
USHORT RemovalRequested
Definition: mm.h:372
USHORT CacheAttribute
Definition: mm.h:373
USHORT PageColor
Definition: mm.h:370
USHORT PrototypePte
Definition: mm.h:369
USHORT Modified
Definition: mm.h:366
USHORT ReadInProgress
Definition: mm.h:367
USHORT PageLocation
Definition: mm.h:371
USHORT Rom
Definition: mm.h:374
USHORT ParityError
Definition: mm.h:375
USHORT WriteInProgress
Definition: mm.h:368
Definition: mm.h:457
PFN_NUMBER Total
Definition: mm.h:458
MMLISTS ListName
Definition: mm.h:459
PFN_NUMBER Blink
Definition: mm.h:461
PFN_NUMBER Flink
Definition: mm.h:460
Definition: mm.h:386
PMM_RMAP_ENTRY RmapListHead
Definition: mm.h:426
MMPTE OriginalPte
Definition: mm.h:422
MMWSLE Wsle
Definition: mm.h:449
ULONG_PTR MustBeCached
Definition: mm.h:438
SINGLE_LIST_ENTRY NextStackPfn
Definition: mm.h:393
struct _MMPFN * NextLRU
Definition: mm.h:450
PFN_NUMBER Blink
Definition: mm.h:401
PMMPTE PteAddress
Definition: mm.h:398
NTSTATUS ReadStatus
Definition: mm.h:392
LONG AweReferenceCount
Definition: mm.h:423
PFN_NUMBER Flink
Definition: mm.h:389
ULONG WsIndex
Definition: mm.h:390
union _MMPFN::@2100 u2
MMPFNENTRY e1
Definition: mm.h:409
ULONG_PTR VerifierAllocation
Definition: mm.h:435
ULONG_PTR ShareCount
Definition: mm.h:402
ULONG_PTR EntireFrame
Definition: mm.h:430
union _MMPFN::@2099 u1
struct _MMPFN::@2101::@2107 e2
struct _MMPFN * PreviousLRU
Definition: mm.h:451
ULONG_PTR InPageError
Definition: mm.h:434
ULONG_PTR Priority
Definition: mm.h:437
PKEVENT Event
Definition: mm.h:391
USHORT ReferenceCount
Definition: mm.h:408
USHORT ShortFlags
Definition: mm.h:414
union _MMPFN::@2101 u3
union _MMPFN::@2104 u4
SWAPENTRY SwapEntry
Definition: mm.h:396
ULONG_PTR AweAllocation
Definition: mm.h:436
ULONG_PTR PteFrame
Definition: mm.h:433
PMM_SECTION_SEGMENT Segments
Definition: mm.h:236
PFILE_OBJECT FileObject
Definition: mm.h:228
SECTION_IMAGE_INFORMATION ImageInformation
Definition: mm.h:233
NTSTATUS(* Trim)(ULONG Target, ULONG Priority, PULONG NrFreed)
Definition: mm.h:474
ULONG PagesTarget
Definition: mm.h:473
ULONG PagesUsed
Definition: mm.h:472
PMMPTE LastPteForPagedPool
Definition: mm.h:504
SIZE_T AllocatedPagedPool
Definition: mm.h:508
PRTL_BITMAP EndOfPagedPoolBitmap
Definition: mm.h:502
PRTL_BITMAP PagedPoolAllocationMap
Definition: mm.h:501
PMMPDE NextPdeForPagedPoolExpansion
Definition: mm.h:505
PMMPTE FirstPteForPagedPool
Definition: mm.h:503
ULONG PagedPoolHint
Definition: mm.h:506
SIZE_T PagedPoolCommit
Definition: mm.h:507
Definition: mm.h:478
LIST_ENTRY RegionListEntry
Definition: mm.h:482
ULONG Type
Definition: mm.h:479
SIZE_T Length
Definition: mm.h:481
ULONG Protect
Definition: mm.h:480
Definition: mm.h:272
PVOID Address
Definition: mm.h:275
PEPROCESS Process
Definition: mm.h:274
struct _MM_RMAP_ENTRY * Next
Definition: mm.h:273
LONG64 RefCount
Definition: mm.h:198
PULONG Flags
Definition: mm.h:207
ULONG_PTR VirtualAddress
Definition: mm.h:214
ULONG SectionCount
Definition: mm.h:205
LARGE_INTEGER RawLength
Definition: mm.h:202
ULONGLONG LastPage
Definition: mm.h:220
struct _MM_SECTION_SEGMENT::@2097 Image
BOOLEAN Locked
Definition: mm.h:209
PLONG64 ReferenceCount
Definition: mm.h:204
FAST_MUTEX Lock
Definition: mm.h:201
PFILE_OBJECT FileObject
Definition: mm.h:199
ULONGLONG FileOffset
Definition: mm.h:213
ULONG SegFlags
Definition: mm.h:218
BOOLEAN WriteCopy
Definition: mm.h:208
ULONG Protection
Definition: mm.h:206
ULONG Characteristics
Definition: mm.h:215
RTL_GENERIC_TABLE PageTable
Definition: mm.h:222
LARGE_INTEGER Length
Definition: mm.h:203
PULONG Buffer
Definition: typedefs.h:91
Definition: ntbasedef.h:640
Definition: compat.h:836
Definition: fci.c:123
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 UCHAR
Definition: typedefs.h:53
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
uint64_t ULONGLONG
Definition: typedefs.h:67
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
#define OUT
Definition: typedefs.h:40
_In_ PGUID _In_ ULONG _Out_ PULONG ResultLength
Definition: ucxcontroller.h:83
_Must_inspect_result_ _In_ UCXENDPOINT _In_ PVOID Tag
Definition: ucxendpoint.h:325
Definition: dlist.c:348
static int Protect(const char **args)
Definition: vfdcmd.c:2132
_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_ _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
_In_ WDFDEVICE _In_ PVOID _In_opt_ PMDL Mdl
_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
_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:1727
@ LockQueuePfnLock
Definition: ketypes.h:728
_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