Bitdefender Hypervisor Memory Introspection
hook_ptm.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2020 Bitdefender
3  * SPDX-License-Identifier: Apache-2.0
4  */
5 #ifndef _HOOK_PTM_H_
6 #define _HOOK_PTM_H_
7 
8 #include "hook_gpa.h"
9 
10 
14 typedef struct _HOOK_PTM_TABLE
15 {
29 
30 
37 typedef struct _HOOK_PTM
38 {
42  PHOOK_PTM_TABLE PtHook;
46 
47 
48 #define PTM_HOOK_TABLE_SIZE 1024
49 #define PTM_HOOK_ID(addr) (((addr) >> 12) & (PTM_HOOK_TABLE_SIZE - 1))
50 #define PTM_PAE_ROOT_HOOK_ID(addr) (((addr) >> 5) & (PTM_HOOK_TABLE_SIZE - 1))
51 
52 
56 typedef struct _HOOK_PTM_STATE
57 {
63 
64 
65 //
66 // API
67 //
70  _In_ QWORD Address,
72  _In_ void *Context,
73  _In_ void *ParentHook,
74  _In_ DWORD Flags,
75  _Out_opt_ PHOOK_PTM *Hook
76  );
77 
80  _Inout_ HOOK_PTM **Hook,
81  _In_ DWORD Flags
82  );
83 
86  _In_ HOOK_PTM **Hook,
87  _In_ DWORD Flags
88  );
89 
92  void
93  );
94 
97  void
98  );
99 
100 #endif // _HOOK_PTM_H_
PHOOK_GPA GpaHook
The GPA hook set on this page-table.
Definition: hook_ptm.h:19
INTSTATUS IntHookPtmRemoveHook(HOOK_PTM **Hook, DWORD Flags)
Remove a page-table hook handle.
Definition: hook_ptm.c:520
LIST_ENTRY RemovedPtmHooks
List of removed page-table hooks (HOOK_PTM_TABLE).
Definition: hook_ptm.h:59
_Bool BOOLEAN
Definition: intro_types.h:58
PHOOK_PTM_TABLE PtHook
Definition: hook_ptm.h:42
#define _In_
Definition: intro_sal.h:21
#define PTM_HOOK_TABLE_SIZE
Definition: hook_ptm.h:48
struct _HOOK_PTM * PHOOK_PTM
struct _HOOK_PTM_TABLE * PHOOK_PTM_TABLE
int INTSTATUS
The status data type.
Definition: introstatus.h:24
HOOK_HEADER Header
Hook header - used by all memory hooks.
Definition: hook_ptm.h:16
struct _HOOK_PTM_STATE * PHOOK_PTM_STATE
#define _Inout_
Definition: intro_sal.h:20
#define _Out_opt_
Definition: intro_sal.h:30
unsigned long long QWORD
Definition: intro_types.h:53
QWORD Address
Guest physical address of the monitored page-table entry.
Definition: hook_ptm.h:41
struct _HOOK_PTM_STATE HOOK_PTM_STATE
DWORD EntriesCount
Definition: hook_ptm.h:24
INTSTATUS IntHookPtmDeleteHook(HOOK_PTM **Hook, DWORD Flags)
Permanently delete a page-table hook handle.
Definition: hook_ptm.c:643
INTSTATUS IntHookPtmInit(void)
Initialize the page-table hook system.
Definition: hook_ptm.c:771
uint32_t DWORD
Definition: intro_types.h:49
LIST_ENTRY * Entries
A list of hooked entries. When a HOOK_PTS_ENTRY is created for entry at offset X, Entries[x] will con...
Definition: hook_ptm.h:27
struct _HOOK_PTM HOOK_PTM
INTSTATUS IntHookPtmCommitHooks(void)
Commit the page-table hooks.
Definition: hook_ptm.c:688
DWORD DelCount
Number of delete requests. The entry will be deleted when this reaches 0.
Definition: hook_ptm.h:23
INTSTATUS(* PFUNC_EptViolationCallback)(void *Context, void *Hook, QWORD Address, INTRO_ACTION *Action)
EPT callback handler.
Definition: hook_gpa.h:30
LIST_ENTRY RemovedPtHooks
List of removed PTM hooks (HOOK_PTM).
Definition: hook_ptm.h:60
DWORD RefCount
Number of references - number of HOOK_PTM structures that point to this entry.
Definition: hook_ptm.h:22
QWORD Gpa
The page-table guest physical address.
Definition: hook_ptm.h:18
LIST_ENTRY Link
List entry link.
Definition: hook_ptm.h:40
BOOLEAN GpaHookSet
Definition: hook_ptm.h:20
INTSTATUS IntHookPtmSetHook(QWORD Address, PFUNC_EptViolationCallback Callback, void *Context, void *ParentHook, DWORD Flags, PHOOK_PTM *Hook)
Set a hook on a page-table.
Definition: hook_ptm.c:325
HOOK_HEADER Header
Hook header - used by all memory hooks.
Definition: hook_ptm.h:39
struct _HOOK_PTM_TABLE HOOK_PTM_TABLE
BOOLEAN HooksRemoved
True if hooks have been removed.
Definition: hook_ptm.h:61
LIST_ENTRY Link
List entry link.
Definition: hook_ptm.h:17