9 VOID
*pmem1
, *pmem2
, *pmem3
, *pmem4
, *pmem5
;
10 PHYSICAL_ADDRESS LowestAcceptableAddress
, HighestAcceptableAddress
, BoundryAddressMultiple
,
12 ULONG AllocSize1
, AllocSize2
, AllocSize3
, AllocSize4
, AllocSize5
, MemSize
;
15 /* Various ways to allocate memory */
16 HighestAcceptableAddress
.QuadPart
= 0x00000000FFFFFF; /* 16MB */
19 pmem1
= MmAllocateContiguousMemory(AllocSize1
, HighestAcceptableAddress
);
20 FAIL_IF_EQUAL(pmem1
, 0, "MmAllocateContiguousMemory() for pmem1 failed");
22 LowestAcceptableAddress
.QuadPart
= 0x00000000F00000; /* 15MB */
23 HighestAcceptableAddress
.QuadPart
= 0x00000000FFFFFF; /* 16MB */
24 BoundryAddressMultiple
.QuadPart
= 512;
27 pmem2
= MmAllocateContiguousMemorySpecifyCache(AllocSize2
,
28 LowestAcceptableAddress
, HighestAcceptableAddress
,
29 BoundryAddressMultiple
, MmNonCached
);
30 FAIL_IF_EQUAL(pmem2
, 0, "MmAllocateContiguousMemorySpecifyCache() for pmem2 failed");
32 LowestAcceptableAddress
.QuadPart
= 0x00000000000000; /* 15MB */
33 HighestAcceptableAddress
.QuadPart
= 0x0000000F000000; /* 250MB */
34 BoundryAddressMultiple
.QuadPart
= 1024;
37 pmem3
= MmAllocateContiguousMemorySpecifyCache(AllocSize3
,
38 LowestAcceptableAddress
, HighestAcceptableAddress
,
39 BoundryAddressMultiple
, MmCached
);
40 FAIL_IF_EQUAL(pmem3
, 0, "MmAllocateContiguousMemorySpecifyCache() for pmem3 failed");
42 LowestAcceptableAddress
.QuadPart
= 0x00000000000000; /* 0MB */
43 HighestAcceptableAddress
.QuadPart
= 0x00000000FFFFFF; /* 16MB */
44 BoundryAddressMultiple
.QuadPart
= 4096;
47 pmem4
= MmAllocateContiguousMemorySpecifyCache(AllocSize4
,
48 LowestAcceptableAddress
, HighestAcceptableAddress
,
49 BoundryAddressMultiple
, MmWriteCombined
);
50 FAIL_IF_EQUAL(pmem4
, 0, "MmAllocateContiguousMemorySpecifyCache() for pmem4 failed");
52 AllocSize5
= 1048576; /* 1MB */
54 pmem5
= MmAllocateNonCachedMemory(AllocSize5
);
55 FAIL_IF_EQUAL(pmem5
, 0, "MmAllocateNonCachedMemory() for pmem5 failed");
57 /* Memory checking functions */
58 PhysicalAddress
.QuadPart
= 0;
59 PhysicalAddress
= MmGetPhysicalAddress(pmem1
);
60 FAIL_IF_EQUAL(PhysicalAddress
.QuadPart
, 0, "MmGetPhysicalAddress() failed");
62 BoolVal
= MmIsAddressValid(pmem1
);
63 FAIL_IF_FALSE(BoolVal
, "MmIsAddressValid() failed for pmem1");
65 BoolVal
= MmIsAddressValid(pmem2
);
66 FAIL_IF_FALSE(BoolVal
, "MmIsAddressValid() failed for pmem2");
68 BoolVal
= MmIsAddressValid(pmem3
);
69 FAIL_IF_FALSE(BoolVal
, "MmIsAddressValid() failed for pmem3");
71 BoolVal
= MmIsAddressValid(pmem4
);
72 FAIL_IF_FALSE(BoolVal
, "MmIsAddressValid() failed for pmem4");
74 BoolVal
= MmIsAddressValid(pmem5
);
75 FAIL_IF_FALSE(BoolVal
, "MmIsAddressValid() failed for pmem5");
77 BoolVal
= MmIsNonPagedSystemAddressValid(pmem1
);
78 FAIL_IF_FALSE(BoolVal
, "MmIsNonPagedSystemAddressValid() failed for pmem1");
80 BoolVal
= MmIsNonPagedSystemAddressValid(pmem2
);
81 FAIL_IF_FALSE(BoolVal
, "MmIsNonPagedSystemAddressValid() failed for pmem2");
83 BoolVal
= MmIsNonPagedSystemAddressValid(pmem3
);
84 FAIL_IF_FALSE(BoolVal
, "MmIsNonPagedSystemAddressValid() failed for pmem3");
86 BoolVal
= MmIsNonPagedSystemAddressValid(pmem4
);
87 FAIL_IF_FALSE(BoolVal
, "MmIsNonPagedSystemAddressValid() failed for pmem4");
89 BoolVal
= MmIsNonPagedSystemAddressValid(pmem5
);
90 FAIL_IF_FALSE(BoolVal
, "MmIsNonPagedSystemAddressValid() failed for pmem5");
93 Server
= MmIsThisAnNtAsSystem();
95 MemSize
= MmQuerySystemSize();
96 if (MemSize
!= MmSmallSystem
&&
97 MemSize
!= MmMediumSystem
&&
98 MemSize
!= MmLargeSystem
)
100 strcpy(Buffer
, "MmQuerySystemSize() failed\n");
104 /* Free allocated memory */
105 MmFreeContiguousMemory(pmem1
);
106 MmFreeContiguousMemorySpecifyCache(pmem2
,
109 MmFreeContiguousMemorySpecifyCache(pmem3
,
112 MmFreeContiguousMemorySpecifyCache(pmem4
,
115 MmFreeNonCachedMemory(pmem5
,
121 DISPATCHER(Mm_1Test
, "Kernel Core Memory API")