| 1380 | } |
| 1381 | |
| 1382 | bool HandleExecuteRead(unsigned long long Pa, const void* NextInstruction) |
| 1383 | { |
| 1384 | unsigned long long Pa4Kb = ALIGN_DOWN_BY(Pa, PageSize); |
| 1385 | auto Handler = m_Handlers.find(Pa4Kb); |
| 1386 | if (Handler == m_Handlers.end()) |
| 1387 | { |
| 1388 | return false; |
| 1389 | } |
| 1390 | |
| 1391 | auto& HandlerEntry = Handler->second; |
| 1392 | if (!HandlerEntry.Handlers.OnExecuteRead.Value) |
| 1393 | { |
| 1394 | return false; |
| 1395 | } |
| 1396 | |
| 1397 | auto* Pte = HandlerEntry.Pte; |
| 1398 | |
| 1399 | m_PendingHandler.Rip = NextInstruction; |
| 1400 | m_PendingHandler.Pte = Pte; |
| 1401 | m_PendingHandler.PendingPrevEntry = *Pte; |
| 1402 | |
| 1403 | *Pte = HandlerEntry.Handlers.OnExecuteRead; |
| 1404 | invept(); |
| 1405 | |
| 1406 | return true; |
| 1407 | } |
| 1408 | |
| 1409 | bool HandleExecuteWrite(unsigned long long Pa, const void* NextInstruction) |
| 1410 | { |
no test coverage detected