ReactOS 0.4.15-dev-5865-g640e228
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#define PAGE_FLAGS_VALID_FOR_SECTION \
135 (PAGE_READONLY | \
136 PAGE_READWRITE | \
137 PAGE_WRITECOPY | \
138 PAGE_EXECUTE | \
139 PAGE_EXECUTE_READ | \
140 PAGE_EXECUTE_READWRITE | \
141 PAGE_EXECUTE_WRITECOPY | \
142 PAGE_NOACCESS | \
143 PAGE_NOCACHE)
144
145#define PAGE_IS_READABLE \
146 (PAGE_READONLY | \
147 PAGE_READWRITE | \
148 PAGE_WRITECOPY | \
149 PAGE_EXECUTE_READ | \
150 PAGE_EXECUTE_READWRITE | \
151 PAGE_EXECUTE_WRITECOPY)
152
153#define PAGE_IS_WRITABLE \
154 (PAGE_READWRITE | \
155 PAGE_WRITECOPY | \
156 PAGE_EXECUTE_READWRITE | \
157 PAGE_EXECUTE_WRITECOPY)
158
159#define PAGE_IS_EXECUTABLE \
160 (PAGE_EXECUTE | \
161 PAGE_EXECUTE_READ | \
162 PAGE_EXECUTE_READWRITE | \
163 PAGE_EXECUTE_WRITECOPY)
164
165#define PAGE_IS_WRITECOPY \
166 (PAGE_WRITECOPY | \
167 PAGE_EXECUTE_WRITECOPY)
168
169//
170// Wait entry for marking pages that are being serviced
171//
172#ifdef _M_IX86
173#define MM_WAIT_ENTRY 0x7ffffc00
174#elif defined(_M_AMD64)
175#define MM_WAIT_ENTRY 0x7FFFFFFFFFFFFC00ULL
176#else
177#error Unsupported architecture!
178#endif
179
180#ifdef _M_AMD64
181#define InterlockedCompareExchangePte(PointerPte, Exchange, Comperand) \
182 InterlockedCompareExchange64((PLONG64)(PointerPte), Exchange, Comperand)
183
184#define InterlockedExchangePte(PointerPte, Value) \
185 InterlockedExchange64((PLONG64)(PointerPte), Value)
186#else
187#define InterlockedCompareExchangePte(PointerPte, Exchange, Comperand) \
188 InterlockedCompareExchange((PLONG)(PointerPte), Exchange, Comperand)
189
190#define InterlockedExchangePte(PointerPte, Value) \
191 InterlockedExchange((PLONG)(PointerPte), Value)
192#endif
193
195{
198
199 FAST_MUTEX Lock; /* lock which protects the page directory */
200 LARGE_INTEGER RawLength; /* length of the segment which is part of the mapped file */
201 LARGE_INTEGER Length; /* absolute length of the segment */
208
209 struct
210 {
211 ULONGLONG FileOffset; /* start offset into the file for image sections */
212 ULONG_PTR VirtualAddress; /* start offset into the address range for image sections */
215
217
219
222
224{
230
236
237#define MM_PHYSICALMEMORY_SEGMENT (0x1)
238#define MM_DATAFILE_SEGMENT (0x2)
239#define MM_SEGMENT_INDELETE (0x4)
240#define MM_SEGMENT_INCREATE (0x8)
241#define MM_IMAGE_SECTION_FLUSH_DELETE (0x10)
242
243
244#define MA_GetStartingAddress(_MemoryArea) ((_MemoryArea)->VadNode.StartingVpn << PAGE_SHIFT)
245#define MA_GetEndingAddress(_MemoryArea) (((_MemoryArea)->VadNode.EndingVpn + 1) << PAGE_SHIFT)
246
247typedef struct _MEMORY_AREA
248{
250
256
257 struct
258 {
264
265typedef struct _MM_RMAP_ENTRY
266{
270#if DBG
271 PVOID Caller;
272#endif
273}
275
276#if MI_TRACE_PFNS
279#define MI_SET_USAGE(x) MI_PFN_CURRENT_USAGE = x
280#define MI_SET_PROCESS2(x) memcpy(MI_PFN_CURRENT_PROCESS_NAME, x, min(sizeof(x), sizeof(MI_PFN_CURRENT_PROCESS_NAME)))
282void
284{
285 if (!Process)
286 MI_SET_PROCESS2("Kernel");
287 else if (Process == (PEPROCESS)1)
288 MI_SET_PROCESS2("Hydra");
289 else
290 MI_SET_PROCESS2(Process->ImageFileName);
291}
292
294void
295MI_SET_PROCESS_USTR(PUNICODE_STRING ustr)
296{
297 PWSTR pos, strEnd;
298 ULONG i;
299
300 if (!ustr->Buffer || ustr->Length == 0)
301 {
303 return;
304 }
305
306 pos = strEnd = &ustr->Buffer[ustr->Length / sizeof(WCHAR)];
307 while ((*pos != L'\\') && (pos > ustr->Buffer))
308 pos--;
309
310 if (*pos == L'\\')
311 pos++;
312
313 for (i = 0; i < sizeof(MI_PFN_CURRENT_PROCESS_NAME) && pos <= strEnd; i++, pos++)
315}
316#else
317#define MI_SET_USAGE(x)
318#define MI_SET_PROCESS(x)
319#define MI_SET_PROCESS2(x)
320#endif
321
322typedef enum _MI_PFN_USAGES
323{
351
352//
353// These two mappings are actually used by Windows itself, based on the ASSERTS
354//
355#define StartOfAllocation ReadInProgress
356#define EndOfAllocation WriteInProgress
357
358typedef struct _MMPFNENTRY
359{
361 USHORT ReadInProgress:1; // StartOfAllocation
362 USHORT WriteInProgress:1; // EndOfAllocation
371
372// Mm internal
373typedef struct _MMPFN
374{
375 union
376 {
382
383 // HACK for ROSPFN
385 } u1;
387 union
388 {
391 } u2;
392 union
393 {
394 struct
395 {
398 };
399 struct
400 {
403 } e2;
404 } u3;
405 union
406 {
409
410 // HACK for ROSPFN
412 };
413 union
414 {
416 struct
417 {
424 };
425 } u4;
426#if MI_TRACE_PFNS
427 MI_PFN_USAGES PfnUsage;
428 CHAR ProcessName[16];
429#define MI_SET_PFN_PROCESS_NAME(pfn, x) memcpy(pfn->ProcessName, x, min(sizeof(x), sizeof(pfn->ProcessName)))
430 PVOID CallSite;
431#endif
432
433 // HACK until WS lists are supported
438
439extern PMMPFN MmPfnDatabase;
440
441typedef struct _MMPFNLIST
442{
448
454
456{
461
462typedef struct _MM_REGION
463{
469
470// Mm internal
471/* Entry describing free pool memory */
472typedef struct _MMFREE_POOL_ENTRY
473{
479
480/* Signature of a freed block */
481#define MM_FREE_POOL_SIGNATURE 'ARM3'
482
483/* Paged pool information */
485{
495
497
498/* Page file information */
499typedef struct _MMPAGING_FILE
500{
510}
512
514
515typedef VOID
520 ULONG OldType,
521 ULONG OldProtect,
522 ULONG NewType,
524);
525
526typedef VOID
532 SWAPENTRY SwapEntry,
533 BOOLEAN Dirty
534);
535
536//
537// Mm copy support for Kd
538//
540NTAPI
544 IN ULONG Size,
546);
547
548//
549// Determines if a given address is a session address
550//
552NTAPI
555);
556
557ULONG
558NTAPI
561);
562
563ULONG
564NTAPI
567);
568
569/* marea.c *******************************************************************/
570
572NTAPI
575 ULONG Type,
578 ULONG Protection,
580 ULONG AllocationFlags,
581 ULONG AllocationGranularity
582);
583
585NTAPI
589);
590
592NTAPI
597 PVOID FreePageContext
598);
599
600VOID
601NTAPI
604 PMMVAD Vad);
605
607NTAPI
612);
613
614PVOID
615NTAPI
619 ULONG_PTR Granularity,
620 BOOLEAN TopDown
621);
622
623VOID
624NTAPI
627
628VOID
629NTAPI
631
632/* npool.c *******************************************************************/
633
634CODE_SEG("INIT")
635VOID
636NTAPI
638
639PVOID
640NTAPI
643 IN SIZE_T SizeInBytes
644);
645
647NTAPI
650);
651
652ULONG
653NTAPI
655 IN PVOID StartingAddress
656);
657
658/* pool.c *******************************************************************/
659
662NTAPI
663MmRaisePoolQuota(
667);
668
670VOID
671NTAPI
672MmReturnPoolQuota(
675);
676
677/* mdl.c *********************************************************************/
678
679VOID
680NTAPI
682 PMDL Mdl,
683 PPFN_NUMBER Pages
684);
685
686/* mminit.c ******************************************************************/
687
688VOID
689NTAPI
691 VOID
692);
693
694CODE_SEG("INIT")
696NTAPI
697MmInitSystem(IN ULONG Phase,
698 IN PLOADER_PARAMETER_BLOCK LoaderBlock);
699
700
701/* pagefile.c ****************************************************************/
702
704NTAPI
706
707VOID
708NTAPI
710
711CODE_SEG("INIT")
712VOID
713NTAPI
715
717NTAPI
719
721NTAPI
723 SWAPENTRY SwapEntry,
725);
726
728NTAPI
730 SWAPENTRY SwapEntry,
732);
733
734VOID
735NTAPI
737
739NTAPI
742 _In_ ULONG PageFileIndex,
743 _In_ ULONG_PTR PageFileOffset);
744
745/* process.c ****************************************************************/
746
748NTAPI
751 IN PEPROCESS Clone OPTIONAL,
752 IN PVOID Section OPTIONAL,
755);
756
758NTAPI
761 IN PINITIAL_PEB InitialPeb,
762 OUT PPEB *BasePeb
763);
764
766NTAPI
770 IN PINITIAL_TEB InitialTeb,
771 OUT PTEB* BaseTeb
772);
773
774VOID
775NTAPI
778 PTEB Teb
779);
780
781VOID
782NTAPI
784
785VOID
786NTAPI
788
789ULONG
790NTAPI
792
794NTAPI
797 IN UCHAR MemoryPriority
798);
799
800/* i386/pfault.c *************************************************************/
801
803NTAPI
805 ULONG Cs,
806 PULONG Eip,
807 PULONG Eax,
808 ULONG Cr2,
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
1138ULONG
1139NTAPI
1141 struct _EPROCESS* Process,
1142 PVOID Address);
1143
1144VOID
1145NTAPI
1147 struct _EPROCESS* Process,
1148 PVOID Address,
1149 ULONG flProtect
1150);
1151
1152BOOLEAN
1153NTAPI
1155 struct _EPROCESS* Process,
1157);
1158
1159BOOLEAN
1160NTAPI
1162 struct _EPROCESS* Process,
1164);
1165
1166CODE_SEG("INIT")
1167VOID
1168NTAPI
1170
1171VOID
1172NTAPI
1175 PVOID Address,
1176 SWAPENTRY* SwapEntry
1177);
1178
1180NTAPI
1183 PVOID Address,
1184 SWAPENTRY SwapEntry
1185);
1186
1187VOID
1188NTAPI
1191 PVOID Address,
1192 SWAPENTRY *SwapEntry);
1193
1194BOOLEAN
1195NTAPI
1199);
1200
1202NTAPI
1204 ULONG Consumer
1205);
1206
1207VOID
1208NTAPI
1210
1211VOID
1212NTAPI
1214
1215ULONG
1216NTAPI
1218
1219BOOLEAN
1220NTAPI
1222
1223VOID
1224NTAPI
1227 SWAPENTRY SavedSwapEntry);
1228
1230NTAPI
1232
1233VOID
1234NTAPI
1238);
1239
1240VOID
1241NTAPI
1243#define MmSetCleanPage(__P, __A) MmSetDirtyBit(__P, __A, FALSE)
1244#define MmSetDirtyPage(__P, __A) MmSetDirtyBit(__P, __A, TRUE)
1245
1246VOID
1247NTAPI
1249 struct _EPROCESS *Process,
1251);
1252
1254NTAPI
1256 struct _EPROCESS *Process,
1258);
1259
1260BOOLEAN
1261NTAPI
1263 IN ULONG MinWs,
1264 IN PEPROCESS Dest,
1265 IN PULONG_PTR DirectoryTableBase
1266);
1267
1268CODE_SEG("INIT")
1270NTAPI
1273 IN PULONG_PTR DirectoryTableBase
1274);
1275
1276CODE_SEG("INIT")
1278NTAPI
1281);
1282
1284NTAPI
1285MmSetExecuteOptions(IN ULONG ExecuteOptions);
1286
1288NTAPI
1289MmGetExecuteOptions(IN PULONG ExecuteOptions);
1290
1292BOOLEAN
1298);
1299
1300/* arch/procsup.c ************************************************************/
1301
1302BOOLEAN
1305 _In_ PULONG_PTR DirectoryTableBase);
1306
1307/* wset.c ********************************************************************/
1308
1311 ULONG Target,
1313 PULONG NrFreedPages
1314);
1315
1316/* region.c ************************************************************/
1317
1319NTAPI
1323 PLIST_ENTRY RegionListHead,
1324 PVOID StartAddress,
1325 SIZE_T Length,
1326 ULONG NewType,
1328 PMM_ALTER_REGION_FUNC AlterFunc
1329);
1330
1331VOID
1332NTAPI
1334 PLIST_ENTRY RegionListHead,
1335 SIZE_T Length,
1336 ULONG Type,
1338);
1339
1341NTAPI
1344 PLIST_ENTRY RegionListHead,
1345 PVOID Address,
1346 PVOID* RegionBaseAddress
1347);
1348
1349/* section.c *****************************************************************/
1350
1351#define PFN_FROM_SSE(E) ((PFN_NUMBER)((E) >> PAGE_SHIFT))
1352#define IS_SWAP_FROM_SSE(E) ((E) & 0x00000001)
1353#define MM_IS_WAIT_PTE(E) \
1354 (IS_SWAP_FROM_SSE(E) && SWAPENTRY_FROM_SSE(E) == MM_WAIT_ENTRY)
1355#define MAKE_PFN_SSE(P) ((ULONG_PTR)((P) << PAGE_SHIFT))
1356#define SWAPENTRY_FROM_SSE(E) ((E) >> 1)
1357#define MAKE_SWAP_SSE(S) (((ULONG_PTR)(S) << 1) | 0x1)
1358#define DIRTY_SSE(E) ((E) | 2)
1359#define CLEAN_SSE(E) ((E) & ~2)
1360#define IS_DIRTY_SSE(E) ((E) & 2)
1361#define WRITE_SSE(E) ((E) | 4)
1362#define IS_WRITE_SSE(E) ((E) & 4)
1363#ifdef _WIN64
1364#define PAGE_FROM_SSE(E) ((E) & 0xFFFFFFF000ULL)
1365#else
1366#define PAGE_FROM_SSE(E) ((E) & 0xFFFFF000)
1367#endif
1368#define SHARE_COUNT_FROM_SSE(E) (((E) & 0x00000FFC) >> 3)
1369#define MAX_SHARE_COUNT 0x1FF
1370#define MAKE_SSE(P, C) ((ULONG_PTR)((P) | ((C) << 3)))
1371#define BUMPREF_SSE(E) (PAGE_FROM_SSE(E) | ((SHARE_COUNT_FROM_SSE(E) + 1) << 3) | ((E) & 0x7))
1372#define DECREF_SSE(E) (PAGE_FROM_SSE(E) | ((SHARE_COUNT_FROM_SSE(E) - 1) << 3) | ((E) & 0x7))
1373
1374VOID
1375NTAPI
1377 const char *file,
1378 int line);
1379
1380#define MmLockSectionSegment(x) _MmLockSectionSegment(x,__FILE__,__LINE__)
1381
1382VOID
1383NTAPI
1385 const char *file,
1386 int line);
1387
1388#define MmUnlockSectionSegment(x) _MmUnlockSectionSegment(x,__FILE__,__LINE__)
1389
1390VOID
1391NTAPI
1393 OUT PSECTION_IMAGE_INFORMATION ImageInformation
1394);
1395
1397NTAPI
1399 IN PVOID Section
1400);
1402NTAPI
1406);
1407
1409NTAPI
1411 IN PVOID Section,
1413);
1414
1416NTAPI
1419 PVOID Address,
1422);
1423
1425NTAPI
1430 SIZE_T Length,
1431 ULONG Protect,
1432 PULONG OldProtect
1433);
1434
1435CODE_SEG("INIT")
1437NTAPI
1439
1441NTAPI
1445 PVOID Address,
1447);
1448
1450NTAPI
1454 PVOID Address,
1456);
1457
1458CODE_SEG("INIT")
1460NTAPI
1462
1464NTAPI
1468 PVOID Address,
1470);
1471
1472VOID
1473NTAPI
1475
1476/* Exported from NT 6.2 Onward. We keep it internal. */
1478NTAPI
1480 _In_ PVOID Section,
1485 );
1486
1487BOOLEAN
1488NTAPI
1492 _In_ ULONG Length);
1493
1495NTAPI
1499 _In_ ULONG Length);
1500
1502NTAPI
1508
1510NTAPI
1515 _In_ PLARGE_INTEGER ValidDataLength);
1516
1517BOOLEAN
1518NTAPI
1522 _In_ ULONG Length);
1523
1524BOOLEAN
1525NTAPI
1531
1532BOOLEAN
1533NTAPI
1537 BOOLEAN Dirty,
1539 ULONG_PTR *InEntry);
1540
1546VOID
1547NTAPI
1548MmDereferenceSegmentWithLock(
1551
1555VOID
1556MmDereferenceSegment(PMM_SECTION_SEGMENT Segment)
1557{
1558 MmDereferenceSegmentWithLock(Segment, MM_NOIRQL);
1559}
1560
1562NTAPI
1564 _In_ PVOID Section,
1566
1567/* sptab.c *******************************************************************/
1568
1570NTAPI
1574 const char *file,
1575 int line);
1576
1578NTAPI
1581 const char *file,
1582 int line);
1583
1584#define MmSetPageEntrySectionSegment(S,O,E) _MmSetPageEntrySectionSegment(S,O,E,__FILE__,__LINE__)
1585
1586#define MmGetPageEntrySectionSegment(S,O) _MmGetPageEntrySectionSegment(S,O,__FILE__,__LINE__)
1587
1588/* sysldr.c ******************************************************************/
1589
1590CODE_SEG("INIT")
1591VOID
1592NTAPI
1594 IN PLOADER_PARAMETER_BLOCK LoaderBlock
1595);
1596
1597CODE_SEG("INIT")
1598BOOLEAN
1599NTAPI
1601 IN PLOADER_PARAMETER_BLOCK LoaderBlock
1602);
1603
1604BOOLEAN
1605NTAPI
1607
1608VOID
1609NTAPI
1611
1613NTAPI
1616 IN PUNICODE_STRING NamePrefix OPTIONAL,
1617 IN PUNICODE_STRING LoadedName OPTIONAL,
1618 IN ULONG Flags,
1619 OUT PVOID *ModuleObject,
1620 OUT PVOID *ImageBaseAddress
1621);
1622
1624NTAPI
1626 IN PVOID ImageHandle
1627);
1628
1630NTAPI
1632 IN HANDLE ImageHandle,
1633 IN BOOLEAN PurgeSection
1634);
1635
1637NTAPI
1639 IN PLDR_DATA_TABLE_ENTRY LdrEntry,
1640 IN PLIST_ENTRY ListHead
1641);
1642
1643VOID
1644NTAPI
1646 IN PLDR_DATA_TABLE_ENTRY LdrEntry);
1647
1648/* procsup.c *****************************************************************/
1649
1651NTAPI
1653 IN PVOID StackPointer
1654);
1655
1656
1658VOID
1660{
1661 KeAcquireGuardedMutex(&CONTAINING_RECORD(AddressSpace, EPROCESS, Vm)->AddressCreationLock);
1662}
1663
1665VOID
1667{
1668 KeReleaseGuardedMutex(&CONTAINING_RECORD(AddressSpace, EPROCESS, Vm)->AddressCreationLock);
1669}
1670
1674{
1675 if (AddressSpace == MmKernelAddressSpace) return NULL;
1677}
1678
1682{
1683 return &((PEPROCESS)KeGetCurrentThread()->ApcState.Process)->Vm;
1684}
1685
1689{
1690 return MmKernelAddressSpace;
1691}
1692
1693
1694/* expool.c ******************************************************************/
1695
1696VOID
1697NTAPI
1699 PVOID P,
1701 ULONG Tag);
1702
1703VOID
1704NTAPI
1706 IN PVOID P);
1707
1708
1709/* mmsup.c *****************************************************************/
1710
1712NTAPI
1714 IN SIZE_T WorkingSetMinimumInBytes,
1715 IN SIZE_T WorkingSetMaximumInBytes,
1716 IN ULONG SystemCache,
1717 IN BOOLEAN IncreaseOkay);
1718
1719
1720/* session.c *****************************************************************/
1721
1724NTAPI
1725MmAttachSession(
1726 _Inout_ PVOID SessionEntry,
1728
1730VOID
1731NTAPI
1732MmDetachSession(
1733 _Inout_ PVOID SessionEntry,
1735
1736VOID
1737NTAPI
1739 _Inout_ PVOID SessionEntry);
1740
1741PVOID
1742NTAPI
1745
1747VOID
1748NTAPI
1749MmSetSessionLocaleId(
1751
1752/* shutdown.c *****************************************************************/
1753
1754VOID
1756
1757/* virtual.c *****************************************************************/
1758
1760NTAPI
1761MmCopyVirtualMemory(IN PEPROCESS SourceProcess,
1763 IN PEPROCESS TargetProcess,
1767 OUT PSIZE_T ReturnSize);
1768
1769/* wslist.cpp ****************************************************************/
1770_Requires_exclusive_lock_held_(WorkingSet->WorkingSetMutex)
1771VOID
1772NTAPI
1774
1775#ifdef __cplusplus
1776} // extern "C"
1777
1778namespace ntoskrnl
1779{
1780using MiPfnLockGuard = const KiQueuedSpinLockGuard<LockQueuePfnLock>;
1781} // namespace ntoskrnl
1782
1783#endif
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:185
return
Definition: dirsup.c:529
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 NULL
Definition: types.h:112
#define P(row, col)
#define NTSTATUS
Definition: precomp.h:20
ULONG SessionId
Definition: dllmain.c:28
return Iosb
Definition: create.c:4402
#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 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:1538
_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:196
static CODE_SEG("PAGE")
Definition: isapnp.c:1482
#define ASSERT(a)
Definition: mode.c:44
unsigned __int64 ULONG64
Definition: imports.h:198
#define _Outptr_result_bytebuffer_(size)
Definition: ms_sal.h:472
#define _Out_opt_
Definition: ms_sal.h:346
#define _Success_(expr)
Definition: ms_sal.h:259
#define _Inout_
Definition: ms_sal.h:378
#define _Out_
Definition: ms_sal.h:345
#define _When_(expr, annos)
Definition: ms_sal.h:254
#define _In_
Definition: ms_sal.h:308
#define _In_opt_
Definition: ms_sal.h:309
_In_ NDIS_ERROR_CODE ErrorCode
Definition: ndis.h:4436
FORCEINLINE struct _KPRCB * KeGetCurrentPrcb(VOID)
Definition: ketypes.h:1080
_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
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:360
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:1157
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:601
SIZE_T MmTotalPagedPoolQuota
Definition: pool.c:28
PVOID MmTriageActionTaken
Definition: drvmgmt.c:27
_In_ SIZE_T _Out_ PSIZE_T NewMaxQuota
Definition: mm.h:667
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:2191
FORCEINLINE PMMSUPPORT MmGetCurrentAddressSpace(VOID)
Definition: mm.h:1681
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:2311
enum _MI_PFN_USAGES MI_PFN_USAGES
#define MI_SET_PROCESS2(x)
Definition: mm.h:319
#define MM_NOIRQL
Definition: mm.h:70
_MI_PFN_USAGES
Definition: mm.h:323
@ MI_USAGE_NONPAGED_POOL_EXPANSION
Definition: mm.h:327
@ MI_USAGE_LEGACY_PAGE_DIRECTORY
Definition: mm.h:336
@ MI_USAGE_PAGE_FILE
Definition: mm.h:346
@ MI_USAGE_NOT_SET
Definition: mm.h:324
@ MI_USAGE_COW
Definition: mm.h:347
@ MI_USAGE_PEB_TEB
Definition: mm.h:332
@ MI_USAGE_PAGE_TABLE
Definition: mm.h:334
@ MI_USAGE_INIT_MEMORY
Definition: mm.h:345
@ MI_USAGE_VAD
Definition: mm.h:331
@ MI_USAGE_SYSTEM_PTE
Definition: mm.h:330
@ MI_USAGE_CONTINOUS_ALLOCATION
Definition: mm.h:338
@ MI_USAGE_PAGED_POOL
Definition: mm.h:325
@ MI_USAGE_MDL
Definition: mm.h:339
@ MI_USAGE_PFN_DATABASE
Definition: mm.h:343
@ MI_USAGE_ZERO_LOOP
Definition: mm.h:341
@ MI_USAGE_DRIVER_PAGE
Definition: mm.h:337
@ MI_USAGE_DEMAND_ZERO
Definition: mm.h:340
@ MI_USAGE_SECTION
Definition: mm.h:333
@ MI_USAGE_WSLE
Definition: mm.h:348
@ MI_USAGE_FREE_PAGE
Definition: mm.h:349
@ MI_USAGE_PAGE_DIRECTORY
Definition: mm.h:335
@ MI_USAGE_CACHE
Definition: mm.h:342
@ MI_USAGE_KERNEL_STACK_EXPANSION
Definition: mm.h:329
@ MI_USAGE_KERNEL_STACK
Definition: mm.h:328
@ MI_USAGE_NONPAGED_POOL
Definition: mm.h:326
@ MI_USAGE_BOOT_DRIVER
Definition: mm.h:344
FORCEINLINE VOID MmLockAddressSpace(PMMSUPPORT AddressSpace)
Definition: mm.h:1659
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:49
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:2885
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:1737
struct _MM_RMAP_ENTRY *NTAPI MmGetRmapListHeadPage(PFN_NUMBER Page)
Definition: freelist.c:458
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:1268
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:1849
NTSTATUS NTAPI MiReadPageFile(_In_ PFN_NUMBER Page, _In_ ULONG PageFileIndex, _In_ ULONG_PTR PageFileOffset)
Definition: pagefile.c:211
VOID NTAPI MmDereferencePage(PFN_NUMBER Page)
Definition: freelist.c:565
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:1864
NTSTATUS NTAPI MmCreateMemoryArea(PMMSUPPORT AddressSpace, ULONG Type, PVOID *BaseAddress, SIZE_T Length, ULONG Protection, PMEMORY_AREA *Result, ULONG AllocationFlags, ULONG AllocationGranularity)
Definition: marea.c:404
VOID NTAPI MmCleanProcessAddressSpace(IN PEPROCESS Process)
Definition: procsup.c:1267
POOL_TYPE NTAPI MmDeterminePoolType(IN PVOID VirtualAddress)
Definition: pool.c:408
MM_MEMORY_CONSUMER MiMemoryConsumers[MC_MAXIMUM]
Definition: balance.c:30
VOID NTAPI MmReferencePage(PFN_NUMBER Page)
Definition: freelist.c:518
PMMPTE MmDebugPte
Definition: mmdbg.c:31
_In_ SIZE_T CurrentMaxQuota
Definition: mm.h:665
SIZE_T MmTotalNonPagedPoolQuota
Definition: pool.c:27
NTSTATUS NTAPI MmNotPresentFaultSectionView(PMMSUPPORT AddressSpace, MEMORY_AREA *MemoryArea, PVOID Address, BOOLEAN Locked)
Definition: section.c:1525
NTSTATUS NTAPI MmPageFault(ULONG Cs, PULONG Eip, PULONG Eax, ULONG Cr2, ULONG ErrorCode)
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:757
struct _MM_RMAP_ENTRY * PMM_RMAP_ENTRY
VOID NTAPI MmRebalanceMemoryConsumers(VOID)
Definition: balance.c:271
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
NTSTATUS NTAPI MmFreeMemoryArea(PMMSUPPORT AddressSpace, PMEMORY_AREA MemoryArea, PMM_FREE_PAGE_FUNC FreePage, PVOID FreePageContext)
Definition: marea.c:283
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:1243
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:45
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 MiRosCheckMemoryAreas(PMMSUPPORT AddressSpace)
VOID NTAPI MmDumpArmPfnDatabase(IN BOOLEAN StatusOnly)
Definition: mminit.c:1474
VOID UpdateTotalCommittedPages(LONG Delta)
Definition: mm.h:871
BOOLEAN NTAPI MmIsFileObjectAPagingFile(PFILE_OBJECT FileObject)
Definition: pagefile.c:119
VOID NTAPI MmFreeDriverInitialization(IN PLDR_DATA_TABLE_ENTRY LdrEntry)
Definition: sysldr.c:1622
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:4729
BOOLEAN NTAPI MmUnsharePageEntrySectionSegment(PMEMORY_AREA MemoryArea, PMM_SECTION_SEGMENT Segment, PLARGE_INTEGER Offset, BOOLEAN Dirty, BOOLEAN PageOut, ULONG_PTR *InEntry)
Definition: section.c:1090
NTSTATUS NTAPI MmQuerySectionView(PMEMORY_AREA MemoryArea, PVOID Address, PMEMORY_BASIC_INFORMATION Info, PSIZE_T ResultLength)
Definition: section.c:2077
NTSTATUS NTAPI MmProtectSectionView(PMMSUPPORT AddressSpace, PMEMORY_AREA MemoryArea, PVOID BaseAddress, SIZE_T Length, ULONG Protect, PULONG OldProtect)
Definition: section.c:2041
MMPFNLIST MmModifiedPageListHead
Definition: pfnlist.c:45
struct _MMPAGING_FILE * PMMPAGING_FILE
_In_ PVOID _Out_opt_ BOOLEAN _Out_opt_ PPFN_NUMBER Page
Definition: mm.h:1298
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:60
VOID NTAPI MiReloadBootLoadedDrivers(IN PLOADER_PARAMETER_BLOCK LoaderBlock)
Definition: sysldr.c:1680
struct _MM_IMAGE_SECTION_OBJECT * PMM_IMAGE_SECTION_OBJECT
VOID NTAPI MiRosCleanupMemoryArea(PEPROCESS Process, PMMVAD Vad)
Definition: marea.c:515
PFN_NUMBER NTAPI MmGetLRUFirstUserPage(VOID)
Definition: freelist.c:45
MMPFNLIST MmZeroedPageListHead
Definition: pfnlist.c:41
VOID NTAPI MmDeleteProcessAddressSpace(IN PEPROCESS Process)
Definition: procsup.c:1366
NTSTATUS MmTrimUserMemory(ULONG Target, ULONG Priority, PULONG NrFreedPages)
Definition: balance.c:139
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:1811
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:816
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:517
struct _MM_SECTION_SEGMENT MM_SECTION_SEGMENT
VOID NTAPI MmQuitNextSession(_Inout_ PVOID SessionEntry)
Definition: session.c:1030
SIZE_T MmDriverCommit
Definition: freelist.c:32
VOID NTAPI MiInitBalancerThread(VOID)
Definition: balance.c:363
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 MmInitializeHandBuiltProcess(IN PEPROCESS Process, IN PULONG_PTR DirectoryTableBase)
Definition: procsup.c:1131
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:1891
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:898
BOOLEAN NTAPI MmIsPageInUse(PFN_NUMBER Page)
Definition: freelist.c:558
NTSTATUS NTAPI MmSetExecuteOptions(IN ULONG ExecuteOptions)
Definition: pagfault.c:2621
PFN_NUMBER NTAPI MmGetPfnForProcess(struct _EPROCESS *Process, PVOID Address)
BOOLEAN NTAPI MmChangeKernelResourceSectionProtection(IN ULONG_PTR ProtectionMask)
Definition: sysldr.c:2280
MMPFNLIST MmModifiedNoWritePageListHead
Definition: pfnlist.c:47
NTSTATUS NTAPI MmGrowKernelStack(IN PVOID StackPointer)
Definition: procsup.c:476
FORCEINLINE VOID MmUnlockAddressSpace(PMMSUPPORT AddressSpace)
Definition: mm.h:1666
PVOID KernelVerifier
Definition: drvmgmt.c:28
NTSTATUS NTAPI MmCallDllInitialize(IN PLDR_DATA_TABLE_ENTRY LdrEntry, IN PLIST_ENTRY ListHead)
Definition: sysldr.c:295
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
BOOLEAN NTAPI MmArePagesResident(_In_ PEPROCESS Process, _In_ PVOID BaseAddress, _In_ ULONG Length)
Definition: section.c:4676
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:486
VOID NTAPI MmDeleteTeb(struct _EPROCESS *Process, PTEB Teb)
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:58
VOID(* PMM_FREE_PAGE_FUNC)(PVOID Context, PMEMORY_AREA MemoryArea, PVOID Address, PFN_NUMBER Page, SWAPENTRY SwapEntry, BOOLEAN Dirty)
Definition: mm.h:527
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:4841
SIZE_T MmtotalCommitLimitMaximum
Definition: freelist.c:36
NTSTATUS NTAPI MmExtendSection(_In_ PVOID Section, _Inout_ PLARGE_INTEGER NewSize)
Definition: section.c:5174
NTSTATUS NTAPI MmInitSectionImplementation(VOID)
Definition: section.c:2272
PVOID MiDebugMapping
Definition: mmdbg.c:30
FORCEINLINE PEPROCESS MmGetAddressSpaceOwner(IN PMMSUPPORT AddressSpace)
Definition: mm.h:1673
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:538
VOID NTAPI MmFreeSwapPage(SWAPENTRY Entry)
Definition: pagefile.c:291
_Out_ PKAPC_STATE ApcState
Definition: mm.h:1727
VOID NTAPI MmSetSavedSwapEntryPage(PFN_NUMBER Page, SWAPENTRY SavedSwapEntry)
Definition: freelist.c:483
NTSTATUS NTAPI MmGetFileNameForAddress(IN PVOID Address, OUT PUNICODE_STRING ModuleName)
Definition: section.c:1885
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
NTSTATUS NTAPI MmMakePagesDirty(_In_ PEPROCESS Process, _In_ PVOID Address, _In_ ULONG Length)
Definition: section.c:5103
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:281
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
_In_ PVOID _Out_opt_ BOOLEAN * WasDirty
Definition: mm.h:1296
NTSTATUS NTAPI MmMakeDataSectionResident(_In_ PSECTION_OBJECT_POINTERS SectionObjectPointer, _In_ LONGLONG Offset, _In_ ULONG Length, _In_ PLARGE_INTEGER ValidDataLength)
Definition: section.c:4821
SWAPENTRY NTAPI MmGetSavedSwapEntryPage(PFN_NUMBER Page)
Definition: freelist.c:499
BOOLEAN MiArchCreateProcessAddressSpace(_In_ PEPROCESS Process, _In_ PULONG_PTR DirectoryTableBase)
Definition: procsup.c:21
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:2579
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:4361
NTSTATUS NTAPI MmAccessFault(IN ULONG FaultCode, IN PVOID Address, IN KPROCESSOR_MODE Mode, IN PVOID TrapInformation)
Definition: mmfault.c:205
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:202
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:266
SIZE_T MmPagedPoolCommit
Definition: freelist.c:34
VOID NTAPI MiCheckAllProcessMemoryAreas(VOID)
VOID NTAPI MmInitializeRmapList(VOID)
Definition: rmap.c:38
PVOID NTAPI MmFindGap(PMMSUPPORT AddressSpace, SIZE_T Length, ULONG_PTR Granularity, BOOLEAN TopDown)
Definition: marea.c:215
SIZE_T MmSharedCommit
Definition: freelist.c:31
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
NTSTATUS NTAPI MmCheckSystemImage(IN HANDLE ImageHandle, IN BOOLEAN PurgeSection)
Definition: sysldr.c:2694
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:73
FORCEINLINE PMMSUPPORT MmGetKernelAddressSpace(VOID)
Definition: mm.h:1688
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:675
PMEMORY_AREA NTAPI MmLocateMemoryAreaByRegion(PMMSUPPORT AddressSpace, PVOID Address, SIZE_T Length)
Definition: marea.c:106
VOID(* PMM_ALTER_REGION_FUNC)(PMMSUPPORT AddressSpace, PVOID BaseAddress, SIZE_T Length, ULONG OldType, ULONG OldProtect, ULONG NewType, ULONG NewProtect)
Definition: mm.h:516
NTSTATUS NTAPI MmCreatePhysicalMemorySection(VOID)
Definition: section.c:2181
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:318
VOID NTAPI MmDeletePageTable(struct _EPROCESS *Process, PVOID Address)
VOID NTAPI MmInit1(VOID)
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
#define inline
Definition: compat.h:23
ULONG * PPFN_NUMBER
Definition: ke.h:9
ULONG PFN_NUMBER
Definition: ke.h:9
PLARGE_INTEGER BOOLEAN BOOLEAN PageOut
Definition: section.c:4932
PLARGE_INTEGER BOOLEAN ForceDirty
Definition: section.c:4930
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:259
PMM_SECTION_SEGMENT Segment
Definition: mm.h:260
PVOID Vad
Definition: mm.h:255
LIST_ENTRY RegionListHead
Definition: mm.h:261
ULONG Flags
Definition: mm.h:252
ULONG Magic
Definition: mm.h:254
BOOLEAN DeleteInProgress
Definition: mm.h:253
ULONG Type
Definition: mm.h:251
struct _MEMORY_AREA::@1769 SectionData
MMVAD VadNode
Definition: mm.h:249
Definition: mm.h:473
ULONG Signature
Definition: mm.h:476
struct _MMFREE_POOL_ENTRY * Owner
Definition: mm.h:477
PFN_COUNT Size
Definition: mm.h:475
LIST_ENTRY List
Definition: mm.h:474
PFN_NUMBER MinimumSize
Definition: mm.h:503
UNICODE_STRING PageFileName
Definition: mm.h:507
PFN_NUMBER Size
Definition: mm.h:501
PRTL_BITMAP Bitmap
Definition: mm.h:508
PFN_NUMBER CurrentUsage
Definition: mm.h:505
PFN_NUMBER FreeSpace
Definition: mm.h:504
PFILE_OBJECT FileObject
Definition: mm.h:506
PFN_NUMBER MaximumSize
Definition: mm.h:502
HANDLE FileHandle
Definition: mm.h:509
USHORT RemovalRequested
Definition: mm.h:366
USHORT CacheAttribute
Definition: mm.h:367
USHORT PageColor
Definition: mm.h:364
USHORT PrototypePte
Definition: mm.h:363
USHORT Modified
Definition: mm.h:360
USHORT ReadInProgress
Definition: mm.h:361
USHORT PageLocation
Definition: mm.h:365
USHORT Rom
Definition: mm.h:368
USHORT ParityError
Definition: mm.h:369
USHORT WriteInProgress
Definition: mm.h:362
Definition: mm.h:442
PFN_NUMBER Total
Definition: mm.h:443
MMLISTS ListName
Definition: mm.h:444
PFN_NUMBER Blink
Definition: mm.h:446
PFN_NUMBER Flink
Definition: mm.h:445
Definition: mm.h:374
PMM_RMAP_ENTRY RmapListHead
Definition: mm.h:411
union _MMPFN::@1772 u3
MMPTE OriginalPte
Definition: mm.h:407
MMWSLE Wsle
Definition: mm.h:434
ULONG_PTR MustBeCached
Definition: mm.h:423
SINGLE_LIST_ENTRY NextStackPfn
Definition: mm.h:381
struct _MMPFN * NextLRU
Definition: mm.h:435
union _MMPFN::@1775 u4
PFN_NUMBER Blink
Definition: mm.h:389
PMMPTE PteAddress
Definition: mm.h:386
NTSTATUS ReadStatus
Definition: mm.h:380
LONG AweReferenceCount
Definition: mm.h:408
PFN_NUMBER Flink
Definition: mm.h:377
ULONG WsIndex
Definition: mm.h:378
MMPFNENTRY e1
Definition: mm.h:397
ULONG_PTR VerifierAllocation
Definition: mm.h:420
ULONG_PTR ShareCount
Definition: mm.h:390
union _MMPFN::@1771 u2
ULONG_PTR EntireFrame
Definition: mm.h:415
struct _MMPFN * PreviousLRU
Definition: mm.h:436
ULONG_PTR InPageError
Definition: mm.h:419
ULONG_PTR Priority
Definition: mm.h:422
union _MMPFN::@1770 u1
PKEVENT Event
Definition: mm.h:379
USHORT ReferenceCount
Definition: mm.h:396
USHORT ShortFlags
Definition: mm.h:402
SWAPENTRY SwapEntry
Definition: mm.h:384
ULONG_PTR AweAllocation
Definition: mm.h:421
ULONG_PTR PteFrame
Definition: mm.h:418
struct _MMPFN::@1772::@1778 e2
PMM_SECTION_SEGMENT Segments
Definition: mm.h:234
PFILE_OBJECT FileObject
Definition: mm.h:226
SECTION_IMAGE_INFORMATION ImageInformation
Definition: mm.h:231
NTSTATUS(* Trim)(ULONG Target, ULONG Priority, PULONG NrFreed)
Definition: mm.h:459
ULONG PagesTarget
Definition: mm.h:458
ULONG PagesUsed
Definition: mm.h:457
PMMPTE LastPteForPagedPool
Definition: mm.h:489
SIZE_T AllocatedPagedPool
Definition: mm.h:493
PRTL_BITMAP EndOfPagedPoolBitmap
Definition: mm.h:487
PRTL_BITMAP PagedPoolAllocationMap
Definition: mm.h:486
PMMPDE NextPdeForPagedPoolExpansion
Definition: mm.h:490
PMMPTE FirstPteForPagedPool
Definition: mm.h:488
ULONG PagedPoolHint
Definition: mm.h:491
SIZE_T PagedPoolCommit
Definition: mm.h:492
Definition: mm.h:463
LIST_ENTRY RegionListEntry
Definition: mm.h:467
ULONG Type
Definition: mm.h:464
SIZE_T Length
Definition: mm.h:466
ULONG Protect
Definition: mm.h:465
Definition: mm.h:266
PVOID Address
Definition: mm.h:269
PEPROCESS Process
Definition: mm.h:268
struct _MM_RMAP_ENTRY * Next
Definition: mm.h:267
LONG64 RefCount
Definition: mm.h:196
struct _MM_SECTION_SEGMENT::@1768 Image
PULONG Flags
Definition: mm.h:205
ULONG_PTR VirtualAddress
Definition: mm.h:212
ULONG SectionCount
Definition: mm.h:203
LARGE_INTEGER RawLength
Definition: mm.h:200
ULONGLONG LastPage
Definition: mm.h:218
BOOLEAN Locked
Definition: mm.h:207
PLONG64 ReferenceCount
Definition: mm.h:202
FAST_MUTEX Lock
Definition: mm.h:199
PFILE_OBJECT FileObject
Definition: mm.h:197
ULONGLONG FileOffset
Definition: mm.h:211
ULONG SegFlags
Definition: mm.h:216
BOOLEAN WriteCopy
Definition: mm.h:206
ULONG Protection
Definition: mm.h:204
ULONG Characteristics
Definition: mm.h:213
RTL_GENERIC_TABLE PageTable
Definition: mm.h:220
LARGE_INTEGER Length
Definition: mm.h:201
PULONG Buffer
Definition: typedefs.h:91
Definition: ntbasedef.h:628
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
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
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:426
_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:792
_Out_ PCLIENT_ID ClientId
Definition: kefuncs.h:1165
@ FreePage
Definition: ketypes.h:404
CCHAR KPROCESSOR_MODE
Definition: ketypes.h:7
* PKAPC_STATE
Definition: ketypes.h:1285
@ LockQueuePfnLock
Definition: ketypes.h:648
_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
_Must_inspect_result_ NTSYSAPI BOOLEAN NTAPI RtlTestBit(_In_ PRTL_BITMAP BitMapHeader, _In_range_(<, BitMapHeader->SizeOfBitMap) ULONG BitNumber)
Definition: bitmap.c:434
_In_ KPROCESSOR_MODE PreviousMode
Definition: sefuncs.h:103
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