MCPcopy Create free account
hub / github.com/HoShiMin/Kernel-Bridge / IsPagePresent

Function IsPagePresent

Kernel-Bridge/API/PteUtils.cpp:227–279  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

225
226 _IRQL_requires_max_(APC_LEVEL)
227 BOOLEAN IsPagePresent(PVOID Address, OPTIONAL OUT PULONG PageSize)
228 {
229 BOOLEAN IsPresent = FALSE;
230 PAGE_TABLES_INFO Info = {};
231 if (GetPageTables(Address, &Info)) __try
232 {
233 if (PageSize) *PageSize = 0;
234
235 switch (Info.Type) {
236 case PAGE_TABLES_INFO::pt32NonPaePage4Kb:
237 // PDE -> PTE -> PA:
238 if (PageSize) *PageSize = 4096;
239 IsPresent = Info.Pte->x32.NonPae.Page4Kb.P;
240 break;
241 case PAGE_TABLES_INFO::pt32NonPaePage4Mb:
242 // PDE -> PA:
243 if (PageSize) *PageSize = 4096 * 1024;
244 IsPresent = Info.Pde->x32.NonPae.Page4Mb.P;
245 break;
246 case PAGE_TABLES_INFO::pt32PaePage4Kb:
247 // PDPE -> PDE -> PTE -> PA:
248 if (PageSize) *PageSize = 4096;
249 IsPresent = Info.Pte->x32.Pae.Page4Kb.P;
250 break;
251 case PAGE_TABLES_INFO::pt32PaePage2Mb:
252 // PDPE -> PDE -> PA:
253 if (PageSize) *PageSize = 2048 * 1024;
254 IsPresent = Info.Pde->x32.Pae.Page2Mb.P;
255 break;
256 case PAGE_TABLES_INFO::pt64Page4Kb:
257 // PML4E -> PDPE -> PDE -> PTE -> PA:
258 if (PageSize) *PageSize = 4096;
259 IsPresent = Info.Pte->x64.Page4Kb.P;
260 break;
261 case PAGE_TABLES_INFO::pt64Page2Mb:
262 // PML4E -> PDPE -> PDE -> PA:
263 if (PageSize) *PageSize = 2048 * 1024;
264 IsPresent = Info.Pde->x64.Page2Mb.P;
265 break;
266 case PAGE_TABLES_INFO::pt64Page1Gb:
267 // PML4E -> PDPE -> PA:
268 if (PageSize) *PageSize = 1024 * 1024 * 1024;
269 IsPresent = Info.Pdpe->x64.PageSize.Page1Gb.P;
270 break;
271 }
272 }
273 __except (EXCEPTION_EXECUTE_HANDLER)
274 {
275 IsPresent = FALSE;
276 }
277
278 return IsPresent;
279 }
280
281 _IRQL_requires_max_(APC_LEVEL)
282 BOOLEAN IsProcessPagePresent(OPTIONAL PEPROCESS Process, PVOID Address, OPTIONAL OUT PULONG PageSize)

Callers 2

IsProcessPagePresentFunction · 0.70
IsMemoryRangePresentFunction · 0.70

Calls 1

GetPageTablesFunction · 0.85

Tested by

no test coverage detected