Sort by address to make searching easier
[reactos.git] / reactos / regtests / kmregtests / tests / mm-1.c
1 #include <ddk/ntddk.h>
2 #include <windows.h>
3
4 #include "regtests.h"
5
6 static int
7 RunTest(char *Buffer)
8 {
9 VOID *pmem1, *pmem2, *pmem3, *pmem4, *pmem5;
10 PHYSICAL_ADDRESS LowestAcceptableAddress, HighestAcceptableAddress, BoundryAddressMultiple,
11 PhysicalAddress;
12 ULONG AllocSize1, AllocSize2, AllocSize3, AllocSize4, AllocSize5, MemSize;
13 BOOL Server, BoolVal;
14
15 /* Various ways to allocate memory */
16 HighestAcceptableAddress.QuadPart = 0x00000000FFFFFF; /* 16MB */
17 AllocSize1 = 512;
18 pmem1 = 0;
19 pmem1 = MmAllocateContiguousMemory(AllocSize1, HighestAcceptableAddress);
20 FAIL_IF_EQUAL(pmem1, 0, "MmAllocateContiguousMemory() for pmem1 failed");
21
22 LowestAcceptableAddress.QuadPart = 0x00000000F00000; /* 15MB */
23 HighestAcceptableAddress.QuadPart = 0x00000000FFFFFF; /* 16MB */
24 BoundryAddressMultiple.QuadPart = 512;
25 AllocSize2 = 512;
26 pmem2 = 0;
27 pmem2 = MmAllocateContiguousMemorySpecifyCache(AllocSize2,
28 LowestAcceptableAddress, HighestAcceptableAddress,
29 BoundryAddressMultiple, MmNonCached);
30 FAIL_IF_EQUAL(pmem2, 0, "MmAllocateContiguousMemorySpecifyCache() for pmem2 failed");
31
32 LowestAcceptableAddress.QuadPart = 0x00000000000000; /* 15MB */
33 HighestAcceptableAddress.QuadPart = 0x0000000F000000; /* 250MB */
34 BoundryAddressMultiple.QuadPart = 1024;
35 AllocSize3 = 512;
36 pmem3 = 0;
37 pmem3 = MmAllocateContiguousMemorySpecifyCache(AllocSize3,
38 LowestAcceptableAddress, HighestAcceptableAddress,
39 BoundryAddressMultiple, MmCached);
40 FAIL_IF_EQUAL(pmem3, 0, "MmAllocateContiguousMemorySpecifyCache() for pmem3 failed");
41
42 LowestAcceptableAddress.QuadPart = 0x00000000000000; /* 0MB */
43 HighestAcceptableAddress.QuadPart = 0x00000000FFFFFF; /* 16MB */
44 BoundryAddressMultiple.QuadPart = 4096;
45 AllocSize4 = 512;
46 pmem4 = 0;
47 pmem4 = MmAllocateContiguousMemorySpecifyCache(AllocSize4,
48 LowestAcceptableAddress, HighestAcceptableAddress,
49 BoundryAddressMultiple, MmWriteCombined);
50 FAIL_IF_EQUAL(pmem4, 0, "MmAllocateContiguousMemorySpecifyCache() for pmem4 failed");
51
52 AllocSize5 = 1048576; /* 1MB */
53 pmem5 = 0;
54 pmem5 = MmAllocateNonCachedMemory(AllocSize5);
55 FAIL_IF_EQUAL(pmem5, 0, "MmAllocateNonCachedMemory() for pmem5 failed");
56
57 /* Memory checking functions */
58 PhysicalAddress.QuadPart = 0;
59 PhysicalAddress = MmGetPhysicalAddress(pmem1);
60 FAIL_IF_EQUAL(PhysicalAddress.QuadPart, 0, "MmGetPhysicalAddress() failed");
61
62 BoolVal = MmIsAddressValid(pmem1);
63 FAIL_IF_FALSE(BoolVal, "MmIsAddressValid() failed for pmem1");
64
65 BoolVal = MmIsAddressValid(pmem2);
66 FAIL_IF_FALSE(BoolVal, "MmIsAddressValid() failed for pmem2");
67
68 BoolVal = MmIsAddressValid(pmem3);
69 FAIL_IF_FALSE(BoolVal, "MmIsAddressValid() failed for pmem3");
70
71 BoolVal = MmIsAddressValid(pmem4);
72 FAIL_IF_FALSE(BoolVal, "MmIsAddressValid() failed for pmem4");
73
74 BoolVal = MmIsAddressValid(pmem5);
75 FAIL_IF_FALSE(BoolVal, "MmIsAddressValid() failed for pmem5");
76
77 BoolVal = MmIsNonPagedSystemAddressValid(pmem1);
78 FAIL_IF_FALSE(BoolVal, "MmIsNonPagedSystemAddressValid() failed for pmem1");
79
80 BoolVal = MmIsNonPagedSystemAddressValid(pmem2);
81 FAIL_IF_FALSE(BoolVal, "MmIsNonPagedSystemAddressValid() failed for pmem2");
82
83 BoolVal = MmIsNonPagedSystemAddressValid(pmem3);
84 FAIL_IF_FALSE(BoolVal, "MmIsNonPagedSystemAddressValid() failed for pmem3");
85
86 BoolVal = MmIsNonPagedSystemAddressValid(pmem4);
87 FAIL_IF_FALSE(BoolVal, "MmIsNonPagedSystemAddressValid() failed for pmem4");
88
89 BoolVal = MmIsNonPagedSystemAddressValid(pmem5);
90 FAIL_IF_FALSE(BoolVal, "MmIsNonPagedSystemAddressValid() failed for pmem5");
91
92 /* Misc functions */
93 Server = MmIsThisAnNtAsSystem();
94 MemSize = 0;
95 MemSize = MmQuerySystemSize();
96 if (MemSize != MmSmallSystem &&
97 MemSize != MmMediumSystem &&
98 MemSize != MmLargeSystem)
99 {
100 strcpy(Buffer, "MmQuerySystemSize() failed\n");
101 return TS_FAILED;
102 }
103
104 /* Free allocated memory */
105 MmFreeContiguousMemory(pmem1);
106 MmFreeContiguousMemorySpecifyCache(pmem2,
107 AllocSize2,
108 MmNonCached);
109 MmFreeContiguousMemorySpecifyCache(pmem3,
110 AllocSize3,
111 MmCached);
112 MmFreeContiguousMemorySpecifyCache(pmem4,
113 AllocSize4,
114 MmWriteCombined);
115 MmFreeNonCachedMemory(pmem5,
116 AllocSize5);
117
118 return TS_OK;
119 }
120
121 DISPATCHER(Mm_1Test, "Kernel Core Memory API")